Daily Front_Minhhk

express 라우터 분리하기, 라우트 매개변수 본문

Study/Node.js

express 라우터 분리하기, 라우트 매개변수

Minhhk 2023. 10. 8. 14:26

app.js에 많은 라우터들을 쓰게 된다면 코드가 매우 지저분 할 것이다.

 

따라서 app.js 에서는 분리된 라우터들을 가져와서 한줄로 적어주고

routes 폴더를 생성하여, 분리하자!

 

 


라우터 분리하기

 

routes/index.js

const express = require('express');

const router = express.Router();

// GET / 라우터
router.get('/', (req, res) => {
  res.render('index', { title: 'Express' });
});

module.exports = router;

 

 

routes/user.js

const express = require('express');

const router = express.Router();

// GET /user 라우터
router.get('/', (req, res) => {
  res.send('Hello, User');
});

module.exports = router;

 

 

app.js

const indexRouter = require('./routes'); //  /index 는 생략가능
const userRouter = require('./routes/user');

...

app.use('/', indexRouter);
app.use('/user', userRouter);

와 같이 라우트 파일을 불러와서 app.use() 와 함께 라우트를 사용하자.

 

app.use 에 사용한 라우터주소 + 파일의 라우터주소 의 형식으로 사용된다.

user 라우터는
/user + /

GET /user/
가 된다.

 

 

 


 

 

라우트 매개변수

->

router.get('/user/:id', (req, res) => {
  console.log(req.params, req.query);
});

:id에 해당하는 1이나 123을 조회할 수 있다는 점이며, req.params 객체 안에 들어 있다.

 

:id이면 req.params.id로, 

:type이면 req.params.type으로 조회 가능!

 

 

주의 점은!!

일반 라우터보다 뒤에 위치해야 한다는 것

 

 

 

쿼리스트링 사용 시,

쿼리스트링의 키-값 정보는 req.query 객체 안에 들어 있다.

 

예를 들어 /users/123?limit=5&skip=10이라는 주소의 요청이 들어왔을 때 

 

req.params req.query 객체는 다음과 같다.

{ id: '123' } { limit: '5', skip: '10' }

 

 

 

라우트 주소가 같을 때는, 하나로 묶어서 보기 좋게 사용 하자!!
router.get('/abc', (req, res) => {
  res.send('GET /abc');
});
router.post('/abc', (req, res) => {
  res.send('POST /abc');
});

->

router.route('/abc')
  .get((req, res) => {
    res.send('GET /abc');
  })
  .post((req, res) => {
    res.send('POST /abc');
  });

 

 

 

미들웨어가 존재하지 않아도 익스프레스가 자체적으로 404 에러를 처리해주기는 하지만,

웬만하면 404 응답 미들웨어와 에러 처리 미들웨어를 연결해주자!

app.use((req, res, next) => {
  res.status(404).send('Not Found');
});