web : back-end/node js
[node js] Express: router 객체를 통해 라우팅을 모듈화하기
무니웜테일패드풋프롱스
2020. 6. 16. 13:40
const router = express.Router();
- 기존에 app = express() 그리고 app.use()로 했던 라우팅을 모듈화하기 위해 사용한다.
- 기존 app과 동일하게 라우팅을 한다.
- 리퀘스트를 받는 메서드로 use, get, post 가 있는데, use는 get post를 모두 받고, get과 post는 같은 path를 받더라도 다른 라우팅으로 구분된다.
- 인자는 'path 이름'과 콜백 함수이다.
- 메인 앱에서는 해당 라우트 파일을 import 해주고, app.use인자로 import해준 변수를 넣어주면 된다. 인자 앞에 특정 path이름을 넣어주면, 해당하는 공통 path로만 시작하는 path로 보내지고, 그 path에 해당하는 라우트 get 이나 post에서는 url path 구분시 공통 path를 생략할 수 있다.
- 라우팅하는 파일에서는 꼭 module.exports=router; 를 해준다. 이를 통해 메인 앱에서 import가 가능하다.
main 앱
const path =require('path');
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const adminRoutes = require('./routes/admin');
const shopRoutes = require('./routes/shop');
app.use(bodyParser.urlencoded({extended: false})); //parser
app.use('/admin',adminRoutes); // '/admin' 으로시작하는 path만 보내진다.
app.use(shopRoutes);
app.use((req,res,next)=>{
res.status(404).send('page not found');
});
app.listen(3000);
admin 라우트
const express = require('express');
const router = express.Router();
// /admin/add-product => GET
router.get('/add-product',(req,res,next)=>{
res.send('<h1>hi</h1>');
});
// /admin/add-product => POST
router.post('/add-product',(req,res,next)=>{ //get과 post방식으로 다르기때문에, 같은 path를 써도 상관없다.
console.log(req.body);
res.redirect('/');
});
module.exports = router;
shop 라우트 (기본페이지)
const express = require('express');
const rootDir = require('../util/path');
const router = express.Router();
router.get('/',(req,res,next)=>{
res.send('<html>hello</html>');
});
module.exports=router;