이해하기 전에 next
노드의 요청-응답주기에 대해 약간의 세부 정보는 없지만 약간의 아이디어가 필요합니다. 특정 리소스에 대한 HTTP 요청을 시작하고 사용자에게 응답을 다시 보내면 (예 : res.send ( 'Hello World');
아주 간단한 예를 봅시다.
app.get('/hello', function (req, res, next) {
res.send('USER')
})
resp.send가주기를 종료하고 제어를 라우트 미들웨어로 다시 넘겨주기 때문에 next ()가 필요하지 않습니다.
이제 다른 예를 살펴 보겠습니다.
app.get('/hello', function (req, res, next) {
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
여기 같은 경로에 2 개의 미들웨어 기능이 있습니다. 그러나 당신은 항상 첫 번째 응답을 얻을 것입니다. 미들웨어 스택에서 먼저 마운트되고 res.send가주기를 종료하기 때문입니다.
그러나 우리가 항상“Hello World !!!!”를 원하지 않는다면 어떨까요? 답장. 어떤 조건에서는 "Hello Planet !!!!" 응답. 위의 코드를 수정하고 어떻게되는지 보자.
app.get('/hello', function (req, res, next) {
if(some condition){
next();
return;
}
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
무엇이 있어요 next
여기서 뭐. 그렇습니다. 거스가있을 수도 있습니다. 조건이 참이면 첫 번째 미들웨어 기능을 건너 뛰고 다음 미들웨어 기능을 호출하면 "Hello Planet !!!!"
응답 을 받게됩니다 .
따라서 미들웨어 스택의 다음 함수로 제어를 전달하십시오.
첫 번째 미들웨어 함수가 응답을 보내지 않고 논리를 실행 한 다음 두 번째 미들웨어 함수에서 응답을 받으면 어떻게 될까요?
아래와 같은 것 :-
app.get('/hello', function (req, res, next) {
// Your piece of logic
next();
});
app.get('/hello', function (req, res, next) {
res.send("Hello !!!!");
});
이 경우 호출 할 미들웨어 기능이 모두 필요합니다. 따라서 두 번째 미들웨어 함수에 도달하는 유일한 방법은 next ();
다음에 전화하지 않으면 어떻게됩니까? 두 번째 미들웨어 기능이 자동으로 호출되는 것을 기대하지 마십시오. 첫 번째 기능을 호출하면 요청이 중단됩니다. 두 번째 함수는 절대 호출되지 않으며 응답을받지 않습니다.
res.send
하면 요청을 완료하는 데 사용 됩니다. 존재하지 않으면 오류를 발행하고 요청을 완료하는 다른 핸들러가있을 수 있습니다.