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');
});