express.Router 클래스를 사용하면 모듈식 마운팅이 가능한 핸들러를 작성할 수 있다.
routes파일을 만들어서 많은 route들을 각자 다른파일에서 관리를 해보도록 하겠습니다.
routes파일을 메인인 server.js와 같은 경로로 만들어주세요.
- 중복되는 라우트 경로가 있을 때 파일별로 관리가 가능하다는 장점이 있다
- 라우트별로 파일을 저장하기 때문에 유지보수가 편하다.
목표: /shop/shirts, /shop/pants로 두가지의 라우트 경로가 있을 때...
어떻게 중복처리를 할 수 있지 않을까???
(shop.js)
var router = require('express').Router();
router.get('/shop/shirts', function(요청, 응답){
응답.send('셔츠 파는 페이지입니다.');
});
router.get('/shop/pants', function(요청, 응답){
응답.send('바지 파는 페이지입니다.');
});
module.exports = router;
express 라이브러리가 제공하는 Router()기능을 사용하는 것.
nodejs 환경에서 JS파일들을 불러와서 사용할 수 있는 문법.
1. require()
2. module.exports
module.exports = 변수명;
JS파일 하단에 이렇게 쓰면 다른곳에서 쓸 수 있게 변수를 내뿜어 줄 수 있다. (함수도 가능)
require('./파일경로');
위의 코드를 통해 다른 파일을 불러올 수 있다. 그러면 불러온 파일이 내뿜은 변수 및 함수를 사용할 수 있게 된다.
자바스크립트 신문법인 import/ export 문법으로 바꿔서 사용할 수 있음!!
(server.js)
app.use('/shop', require('./routes/shop.js') );
app.use()는 미들웨어를 사용하고 싶을 때 쓰는 함수.
미들웨어
요청과 응답 사이에 실행되는 코드
파라미터로는 2가지를 받을 수 있는데,
1. 경로를 통한 조건(ex app.use('/', 미들웨어)
'/'를 통해 접속하면 미들웨어를 적용하겠습니다!
2. 실행할 미들웨어
이제 위의 코드를 보면, '/shop'이라는 경로로 접속하려고 하면, routes파일의 shop.js파일을 실행시켜주세요~ 라는 코드가 됩니다.
이제 우리는 /shop으로 접속했을 때, shop.js를 실행시킬 수 있게 된다. 따라서, /shop을 부모디렉터리로 두는 경로들을 관리할 수 있게 되었다!!
//(shop.js)
let router = require('express').Router();
// 모든 router에 미들웨어적용
//router.use(login);
router.use('/shirts',login);
router.get('/shirts', function(req, res){
res.send('셔츠 파는 페이지입니다.');
});
router.get('/pants', function(req, res){
res.send('바지 파는 페이지입니다.');
});
module.exports = router;
/shop을 지정해주지 않아도, /shop으로 라우트 된 경로로 접근 후, shop.js가 실행되기 때문에 /shop/shirts, /shop/pants로 라우트가 가능해졌다!!