웹 프로그래밍

[Express] 라우터

미안하다 강림이 좀 늦었다 2023. 11. 17. 01:05

 

 

Express 라우터

큰 앱 하나에 라우트를 많이 넣으면 코드의 길이가 매우 길어집니다. 실제로 앱을 만들때는 그렇게 하지 않기 때문에 Express 라우터를 사용합니다. 

 

아래와 같은 라우트를 만들어봅시다.

Route Method
GET /farms
POST /farms
GET /farms/:id
GET /farms/:id/edit

 

farms.js

const express = require('express');
const router = express.Router();

router.get('/farms', (req, res) => {
    res.send('All Farms');
})
router.post('/farms', (req, res) => {
    res.send('Creating Farm');
})
router.get('/farms/:id', (req, res) => {
    res.send('Viewing One Farm');
})
router.get('/farms/:id/edit', (req, res) => {
    res.send('Editing One Farm');
})

module.exports = router;

 

index.js

const colors = require('colors');
const express = require('express');
const farmRoutes = require('./Routes/farms');
const app = express();

app.listen(3000, () => {
    console.log('Listening on port 3000!'.yellow);
})

app.use('/', farmRoutes);

 

마지막의 app.use 부분이 미리 정의한 라우트에 접두사를 지정하는 역할을 합니다. 아래의 사진에서 모든 라우트가 정상 작동하는 것을 확인할 수 있습니다.

/farms
/farms/:id
/farms/:id/edit

 

 

Express 라우터 미들웨어

기밀이 적혀있는 페이지를 관리자만 볼 수 있도록 해봅시다.

 

admin.js

const express = require('express');
const router = express.Router();

router.use((req, res, next) => {
    if (req.query.isAdmin === 'true') { return next(); }
    return res.send("SORRY NOT AN ADMIN!!!!");
})

router.get('/topsecret', (req, res) => {
    res.send('This is top secret');
})

module.exports = router;

 

index.js

const colors = require('colors');
const express = require('express');
const farmRoutes = require('./Routes/farms');
const adminRoutes = require('./Routes/admin');
const app = express();

app.listen(3000, () => {
    console.log('Listening on port 3000!'.yellow);
})

app.use('/', farmRoutes);
app.use('/admin', adminRoutes);

/admin/topsecret
/admin/topsecret/isAdmin=true