✅ Router
주소별로 분기 처리를 할 때 app.js 에서 if문을 사용하게 된다면
코드가 복잡해지고 확장성이 떨어진다
express에서는 라우터를 분리하는 방법을 제공한다
🔨 Router 객체 생성
const express = require('express');
const router = express.Router();
✅ 예제
router 폴더 안에 index.js 와 user.js 를 나누어 라우터 파일을 생성했다
두 파일을 app.js 에서 사용해보는 예제
🔨 index.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res) =>{
res.send('this is index.js');
});
module.exports = router;
🔨 user.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res) =>{
res.send('this is user.js');
});
module.exports = router;
🔨 app.js
const express = require('express');
const path = require('path');
/* index.js 는 생략할 수 있다 */
const indexRouter = require('./router');
const userRouter = require('./router/user');
const app = express();
app.set('port', process.env.PORT || 3000);
/* 라우터 미들웨어 장착 */
app.use('/', indexRouter);
app.use('/user', userRouter);
app.use((req, res, next) => {
res.status(404).send('Not Found');
})
app.listen(app.get('port'), ()=>{
console.log(`Server online on port ${app.get('port')}`);
});
app.use((err, req, res, next)=>{
console.error(err);
res.status(500).send(err.message);
});
주소 '/' 에서 indexRouter 내의 router.get('/') 이 합쳐져 GET / 라우터가 되었다
주소 '/user' 에서 userRouter 내의 router.get('/') 이 합쳐져 GET /user 라우터가 되었다
이처럼 app.use 로 연결하면 주소가 합쳐지게 된다
✅ 라우트 매개변수
라우터 주소에는 정규표현식과 같은 특수 패턴을 사용할 수 있다
그 중 라우트 매개변수는 다음과 같이 사용할 수 있다
🔨 user.js
const express = require('express');
const router = express.Router();
router.get('/:id', (req, res) =>{
res.send(`this is user ${req.params.id}`);
});
module.exports = router;
req.params 객체 안에 값이 들어오게 된다
:id 는 req.params.id 로 조회할 수 있다
주의할 점은 일반 라우터보다 뒤에 위치해야 한다
이 방식은 와일드카드 역할을 하기 때문이다
🔨 user.js
const express = require('express');
const router = express.Router();
router.get('/:id', (req, res) =>{
res.send(`this is user ${req.params.id}`);
});
/* 뒤의 경로는 실행되지 않음 */
router.get('/detail', (req, res) =>{
res.send('ignored');
});
module.exports = router;
✅ 쿼리스트링
주소에 쿼리스트링이 들어오는 경우에는
req.query 객체에 값이 저장된다
/user/123?name=gengminy&age=20
{ name: 'gengminy', age: '20' }
✅ 메소드 체이닝
router.route 와 app.route 를 사용한 후
메소드 체이닝으로 관련 코드끼리 묶을 수도 있다
router.route('/user')
.get((req, res) =>{
res.send(`this is GET /user`);
})
.post((req, res) =>{
res.send(`this is POST /user`);
});
'📡 백엔드 > ⭐ Node.js' 카테고리의 다른 글
[Nodejs] Sequelize 로 SQL 쿼리 사용하기 (0) | 2022.05.21 |
---|---|
[Nodejs] Sequelize 로 SQL 데이터베이스 연동하기 (0) | 2022.05.21 |
[Nodejs] 미들웨어의 사용과 자주 쓰이는 미들웨어 (0) | 2022.05.16 |
[Nodejs] express 서버 열기 (0) | 2022.05.15 |
[Nodejs] 쿠키와 세션 (2) | 2022.05.15 |