express.Router로 라우트 나누기!

cometLEE·2023년 5월 11일
0

nodeJS

목록 보기
6/9

express.Router

express.Router 클래스를 사용하면 모듈식 마운팅이 가능한 핸들러를 작성할 수 있다.

routes파일을 만들어서 많은 route들을 각자 다른파일에서 관리를 해보도록 하겠습니다.
routes파일을 메인인 server.js와 같은 경로로 만들어주세요.

Router 모듈을 왜사용하나??

  1. 중복되는 라우트 경로가 있을 때 파일별로 관리가 가능하다는 장점이 있다
  2. 라우트별로 파일을 저장하기 때문에 유지보수가 편하다.

목표: /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()기능을 사용하는 것.


module.exports?

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로 라우트가 가능해졌다!!

profile
server, kubernetes에 관심이 많이 있습니다

0개의 댓글