express.Router
app.js에 모든 라우터를 포함시키면 코드 가독성이 떨어지기 때문에, express.Router를 통해 이를 방지할 수 있다.
// app.js
// 라우터 설정
app.use('/', indexRouter);
app.use('/user', userRouter);// routes/index.js
const express = require('express');
const router = express.Router();
// GET / 라우터
router.get('/', (req, res) => {
res.send('Hello, Express Router!');
});
module.exports = router;const express = require('express');
const router = express.Router();
// GET /user 라우터
router.get('/', (req, res) => {
res.send('User Router');
});
module.exports = router;라우트 매개변수
:id를 넣으면 req.params.id로 받을 수 있다.
동적으로 변하는 부분을 라우트 매개변수로 만든다.
router.get('/user/:id', function(req, res) {
console.log(req.params, req.query);
});일반 라우터보다 뒤에 위치해야 한다.
router.get('/user/:id', function(req, res) {
console.log('/user로 시작하는 라우터를 다 처리');
})
router.get('/user/like', function(req, res) {
console.log('해당 코드는 실행 x');
})/user/123?limit=5&skip=10 주소 요청인 경우
{ 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로 묶음
router.route('/abc')
.get((req, res) => {
res.send('GET /abc');
})
.post((req, res) => {
res.send('POST /abc');
});기타
메서드 체이닝을 지원한다.
res
.status(201)
.cookie('test', 'test')
.redirect('/admin')응답은 한 번만 보내야 한다.
응답을 여러 번 보내는 경우, 다음과 같은 에러가 발생한다.
Error: Can't set headers after they are send.
at validateHeader (_http_outgoing.js:489:11)
at ServerResponse.setHeader (_http_outgoing.js:496:3)