티스토리 뷰
Node JS를 공부하면서 Next() 메소드를 사용하는 경우를 자주 보았다.
그리고 클론 프로젝트를 하면서 따라서 Next() 메소드를 사용했었다. 이 메소드가 무엇인지 모른 채로.
그리고 코드를 다시 보면서 Next() 메소드는 무엇이길래 쓰이는 거지? 궁금함이 생겼다.
그래서 구글 검색을 통해서 알아보기로 했다.
Node JS의 Express 공식 문서는 Next() 메소드를 미들웨어 함수로 보내진다고 작성되어 있다.
"그래서 이게 뭐냐고! 이게 무슨 역할을 하냐고!"
그래서 이를 잘 해석해준 블로그를 찾기로 했다.
한 블로그에서 공식 문서에서 이해하기 어려운 글을 쉽게 해석해서 올렸다.
[NodeJS][Express]도대체 next메소드의 정체는 뭘까?
nodejs의 express를 사용하다보면 router를 사용하는 경우가 많다. 이 때 콜백 함수를 사용한다. 아래를 보자. router.get('/', function (req, res, next) { console.log('step2'); res.send('respond with a re..
kamang-it.tistory.com
이 블로그에서 Next() 메소드에 대해 쉽게 설명하자면 아래와 같다.
현재 라우터에서 판단하지 않고 다음 라우터로 넘기겠다!
그러나 위의 해석을 봐도 정확히 이해하기 어려웠다. 그래서 예시 코드를 보면서 이해가 필요했다.
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
console.log('oneStep');
next();
});
module.exports = router;
위 로직 코드는 매우 간단하다. 코드에서 보이듯이 res를 사용해서 결과를 내보내지 않고 next를 사용해서 판단을 유보시킨다.
만약에 next를 사용하지 않고 res를 사용했다면 어떻게 로직을 작성했을까?
var express = require('express');
var router = express.Router();
router.get('/', function (req, res, next) {
console.log('twoStep');
res.send('respond with a resource');
});
module.exports = router;
위 코드처럼 res로 "respond with a resource"를 내보냈을 것이다.
next로 작성한 코드를 oneStep.js 이라고 하고 res로 작성한 코드를 twoStep.js 이라고 하자.
그리고 두 개의 파일을 실행하고 결과를 확인하면 아래와 같다.
var oneStep = require('./oneStep');
var twoStep = require('./twoStep');
app.use('/users', oneStep, twoStep);
위 코드를 실행하면 oneStep이 실행이 되고 twoStep이 실행이 된다. 이렇게 next를 사용하면 현재 판단하지 않고 다음 router로 떠넘긴다.
next에 파라미터를 넣는 순간 에러를 보이게 된다. 다만, next('router')에만 에러를 보이지 않는 특수한 경우가 있다.
정리를 하자면
next는 다음 라우터로 전이를 수행하게 하는 역할이다. 즉, 현재 라우터에서 응답을 하지 않고 바로 그 다음에 정의된 라우터로 행동을 떠넘기는 것이다.
더욱 쉬운 예로 확인을 하자면
router.get('/', function(req, res, next) {
console.log('다른 라우터로 떠넘기기!');
next();
});
router.get('/', function(req, res, next) {
res.send('떠넘겨졌다!');
});
위 코드를 실행하면 떠넘겨졌다!가 출력이 된다.
'백엔드 > Node' 카테고리의 다른 글
[MongoDB] DB Error MongooseServerSelectionError (0) | 2023.04.04 |
---|---|
제어할 수 없는 것에 의존하지 않기 (0) | 2023.03.30 |
Node에서 Serverless 생성하고 설정하기 (0) | 2023.03.28 |
Export Default & Export (0) | 2021.09.29 |
Express에서 Parameter 받는 방법 (0) | 2021.03.26 |
- Total
- Today
- Yesterday
- 자바스크립트
- if(kakao)dev2022
- 최종추가합격
- 조코딩과함께
- 코딩테스트 대비
- 신입개발자가 준비해야 할 것들
- Default Branch
- 싱글톤
- Frontend
- LottieFiles
- 원티드 프리온보딩 챌린지
- 스프링
- 고민한 부분
- 개발 이력서 지원 팁
- #포스텍애플디벨로퍼아카데미
- node
- 포스텍애플디벨로퍼아카데미
- 그룹인터뷰후기
- 개발자이력서꿀팁
- 프론트엔드 챌린지
- 원티드 프리온보딩
- Express
- Singleton
- PostechAppleDeveloperAcademy
- 설명회느낌점
- javascript
- DB Error MongooseServerSelectionError
- 포스텍애플아카데미
- 깃허브 Merge
- React
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |