Routes separate 1
https://expressjs.com/ko/guide/using-middleware.html
지금까지 사용한 라우터 app.get.. 는 application-level middleware
-> Router-level middleware 사용
var express = require('express');
var app = express();
var router = express.Router();
router.get('/r1', function(req, res){
res.send('Hello /p1/r1');
})
router.get('/r2', function(req, res){
res.send('Hello /p1/r2');
})
app.use('/p1', router); // /p1으로 들어오는 모든 점속은 router에게 위임.
app.listen(3003, function(){
console.log('connected');
})
'/p1/r1' 주소에 접근하면 Hello /p1/r1 이 출력되고, '/p1/r2' 주소에 접근하면 Hello /p1/r2 가 출력된다.
Routes separate 2
rouoter 코드를 외부의 파일로 옮겨, 모듈로 사용하도록 코드를 정리한다.
//app_route.js
var express = require('express');
var app = express();
var p1 = require('./routes/p1');
app.use('/p1', p1); // /p1으로 들어오는 모든 점속은 router에게 위임.
var p2 = require('./routes/p2');
app.use('/p2', p2);
app.listen(3003, function(){
console.log('connected');
})
//----------------------------------------------------------------------
// p1.js
var express= require('express');
var router = express.Router();
router.get('/r1', function(req, res){
res.send('Hello /p1/r1');
})
router.get('/r2', function(req, res){
res.send('Hello /p1/r2');
})
module.exports = router;
//-----------------------------------------------------------------------
// p2.js
var express = require('express');
var router = express.Router();
router.get('/r1', function(req, res){
res.send('Hello /p2/r1');
})
router.get('/r2', function(req, res){
res.send('Hello /p2/r2');
})
module.exports = router;
Routes separate 3
위와 같이 모듈을 사용하여 빼면, p1.js는 완전히 고립되어 있기 때문에 발생 가능한 문제를 줄일 수도 있다.
그렇다면 p1.js에서 app_route.js의 객체나 변수를 이용하고 싶을 때는 어떻게 해야할까?
// p1.js
module.exports = function(app){
var express= require('express');
var router = express.Router();
router.get('/r1', function(req, res){
res.send('Hello /p1/r1');
})
router.get('/r2', function(req, res){
res.send('Hello /p1/r2');
})
app.get('/p3/r1', function(req, res){
res.send('Hello /p3/r1'); // app 객체 이용 가능.
})
return router;
};
그럴 때는 위와 같이 module.exports의 값으로 함수를 만들어서 매개변수를 받아올 수 있도록 한다. 이러면 함수 안에서 매개변수로 받은 app 객체를 이용할 수 있다. 마지막에 라우터를 리턴하도록 하면 기존과 동일하게 동작하게 된다.
var express = require('express');
var app = express();
var p1 = require('./routes/p1')(app); // app이라는 객체를 전달.
app.use('/p1', p1); // /p1으로 들어오는 모든 점속은 router에게 위임.
var p2 = require('./routes/p2')(app);
app.use('/p2', p2);
app.listen(3003, function(){
console.log('connected');
})
호출하는 쪽에서는 위와 같이 매개변수를 함께 주면서 함수를 호출한다.
'스터디📖 > Node.js' 카테고리의 다른 글
[nodejs] Node.Js 활용하기 - 섹션 9. 정리정돈의 기술 2 - 자신의 모듈 만들기 (0) | 2022.02.15 |
---|---|
[nodejs] Node.Js 활용하기 - 섹션8. 정리정돈의 기술 1 - Jade Extends 살펴보기 (0) | 2022.02.15 |
[nodejs] Node.Js 활용하기 - 섹션 7. Mysql 버전으로 로그인 인증 구현하기 (0) | 2022.02.15 |
[nodejs] Node.Js 활용하기 - 섹션 5. 타사인증 (Federation authentication) (0) | 2022.02.14 |
[nodejs] Node.Js 활용하기 - 섹션 4. 인증을 쉽게 도와주는 PassportJS 모듈 (0) | 2022.02.14 |