라우터로 별개의 파일에서 라우팅을 하는데, 상위 라우터의 파라미터가 필요한 경우가 있다.
가령 이런 경우다.
// app.js
const app = express();
const userRouter = require('/routes/user');
// 부모 라우터
app.use('/:userId', userRouter);
// routes/user.js
const express = require('express');
const router = express.Router();
// 자식 라우터
router.get('/', (req, res, next) => {
console.log(req.params); // output: {}
})
기본적으로 express에서는 라우터의 파라미터를 req.params
에 저장한다. 그런데 하위 라우터에는 이 req.params
가 넘어가지 않는다.
그래서 위의 예제에서는 req.params
를 콘솔에 찍었을 때 아무것도 안나온다. 자식 라우터의 req
에는 상위 라우터의 req.params
값인 userId
가 없기 때문이다.
부모 라우터에서 자식 라우터에게 req.params
를 넘겨주기 위해서는 express.Router()
의 인자로 {mergeParams: true}
옵션을 추가해주어야 한다.
// routes/user.js
const express = require('express');
const router = express.Router({mergeParams: true});
// 자식 라우터
router.get('/', (req, res, next) => {
console.log(req.params); // output: {user_id: ㅇㅇ}
})
express.Router()
의 mergeParams
옵션은 부모 라우터의 req.params
를 자식에게 넘겨준다. 만약 부모와 자식의 params가 겹치는 경우, 자식 라우터의 params가 우선된다. 기본값은 false이다.
안녕하세요 현재 node.js를 공부하다가 사이트를 발견하게 되었는데 내용이 정말 잘 정리되어 있어 도움이 많이 되었습니다. 혹시 내용을 인용하여도 괜찮을까요?? 출처는 명시하겠습니다. 혹시 불편하시다면 인용하지 않겠습니다.!