Usage/JavaScript-NodeJS
[NodeJS][Express]도대체 next메소드의 정체는 뭘까?
Kamangs
2019. 8. 20. 17:45
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에 파라메터를 넣게 되는순간 무조건 에러로 간다.