728x90

nodejs의 express를 사용하다보면 router를 사용하는 경우가 많다.

이 때 콜백 함수를 사용한다. 아래를 보자.


router.get('/', function (req, res, next) {
console.log('step2');
res.send('respond with a resource');
});

위와 같이 사용한다.


이때 req는 request의 줄임말로 받은 응답이 된다.

res는 response의 줄임말로 보내는 결과가 되게 될 것이다.

그런데 도대체 next의 정체는 무엇인가?

우리는 이 때 사용할 수 있는건 바로 api문서일 것이다.


http://expressjs.com/en/5x/api.html#router.param


express의 docs를 보면 미들웨어 함수로 보내진다고 한다.

공식문서를 봐서는 뭐라고 하는지 이해하기 힘들 수 있다.

그래서 더 간단히 말하려고한다.


현재 라우터에서 판단하지 않고 다음 라우터로 넘기겠다.

이는 사용하는 예제를 보면 확실하게 이해할 수 있다.


// step1.js
var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
console.log('step1');
next();
});

module.exports = router;

간단한 로직인데 res를 사용해서 결과를 내지 않고 next를 사용해서 판단을 유보시킨다.


// step2.js
var express = require('express');
var router = express.Router();

router.get('/', function (req, res, next) {
console.log('step2');
res.send('respond with a resource');
});

module.exports = router;

이녀석은 뭐 특별하게 없다.


//app.js
var step1 = require('./routes/step1');
var step2 = require('./routes/step2');
app.use('/users', step1, step2);

app.js에서는 위와 같이 추가해준다.

놀라운게 있는데 app.use에 병렬적으로 붙혀준다.

그럼 실행예제를 보도록하자.



보면 알겠지만 step1이 우선실행되고 step2가 뒤에 실행된다.

이렇게 next는 현재에 판단하지않고 다음 router로 떠넘기는걸 알 수 있다.


단 조심해야할건 next에 파라메터를 넣게 되는순간 무조건 에러로 간다.

+ Recent posts