2016-08-30 2 views
0

nodejs로 api를 개발 중입니다. 나는이 같은 req, res와 함수에 전달 된 매개 변수가 보았다 :Nodejs next function, 이유가 무엇입니까?

bookRouter.use('/:bookId', function(req,res,next){ 
     Book.findById(req.params.bookId, function(err,book){ 
      if(err) 
       res.status(500).send(err); 
      else if(book) 
      { 
       req.book = book; 
       next(); 
      } 
      else 
      { 
       res.status(404).send('no book found'); 
      } 
     }); 
    }); 

내가 내 개발이 기능을 사용한 적이과 내가 내가 정말이 사용해야 할 경우 알고 싶어?

+0

이것은 익스프레스 프레임 워크가 작동하는 방식입니다 (덧붙여 말하자면, req, res는 내장 http 라이브러리가 작동하는 방식이며, API는 http 라이브러리와 호환 가능). 당신이 급행을 사용하고 싶지 않다면 당신은 그것을 필요로하지 않습니다. 웹 사이트를 만들고 싶지 않으면 req와 res를 필요로하지 않습니다. – slebetman

+0

관련 항목 : http://stackoverflow.com/questions/13133071/express-next-function-what-is-it-really-for –

답변

1

:

당신은 요청을 처리하는 미들웨어처럼 행동 여러 콜백 기능을 제공 할 수 있습니다. 유일한 예외는 이러한 콜백이 next ('route')를 호출하여 나머지 경로 콜백을 우회 할 수 있다는 것입니다. 이 메커니즘을 사용하여 경로에 선행 조건을 부과 한 다음 현재 경로로 진행할 이유가 없으면 제어를 후속 경로로 전달할 수 있습니다.

단일 콜백 기능으로 경로를 처리 할 수 ​​있습니다. 예 :

app.get('/example/a', function (req, res) { 
    res.send('Hello from A!'); 
}); 

둘 이상의 콜백 함수가 경로를 처리 할 수 ​​있습니다 (다음 개체를 지정해야합니다). 예 :

app.get('/example/b', function (req, res, next) { 
    console.log('the response will be sent by the next function ...'); 
    next(); 
}, function (req, res) { 
    res.send('Hello from B!'); 
}); 
0

나는 node.js에 강하지 만, 주어진 ID를 가진 책이 발견되면 함수를 호출하는 것이 목표입니다. 호출 할 함수는 next으로 전달됩니다. 다른 미들웨어 구성 요소가있을 수 있으므로 next()을 호출하면이 부분이 성공하면 다음 미들웨어가 요청을 처리 할 수 ​​있습니다.

0

next()은 요청을 처리하는 마지막 작업이기 때문에 next()을 사용할 필요가 없습니다.

미들웨어 기능은 요청 개체 (REQ), 응답 오브젝트 (해상도), 및 응용 프로그램의 요청 - 응답 사이클의 다음 미들웨어 기능에 액세스 할 수있는 기능은 : 여기 documentation 단편이다. 다음 미들웨어 기능은 보통 next라는 변수로 표시됩니다.

미들웨어의 기능은 다음과 같은 작업을 수행 할 수

  1. 은 코드를 실행합니다.
  2. 요청 및 응답 개체를 변경하십시오.
  3. 요청 - 응답주기를 끝내십시오.
  4. 스택의 다음 미들웨어 함수를 호출하십시오.

현재 미들웨어 기능이 요청 - 응답주기를 종료하지 않으면 next()를 호출하여 다음 미들웨어 기능으로 제어를 넘겨야합니다. 그렇지 않으면 요청이 중단됩니다. 문서에서

+0

마지막이 아닙니다. 보시다시피,'req.book'을 설정했지만 응답을 보내지 않습니다. – robertklep

+0

아, 네. 동의하다. 그런 다음'next()'를 호출하면 다음 미들웨어로 제어권을 넘겨 줄 것이다. – Fka

0

노드는 콜백을 사용하는 이벤트 기반 언어입니다. 이벤트가 성공적으로 트리거되고 일부 기능을 실행하려는 경우 인수로 전달됩니다.그러나 함수를 전달하지 않거나 사용하지 않으면 문제가 발생하지 않습니다.

관련 문제