1

express.js 위에 구축 된 sails.js를 사용하고 있습니다. 내 routes.js에서 나는express.js/sail.js 컨트롤러의 범위에서 다음 미들웨어 이해

'/account/login': { 
     controller : 'Session', 
     action  : 'logInAPI' 
    }, 

을 다음과 같이 경로를 정의 그리고 내 세션 컨트롤러는 middlewear에서 가리키는 않습니다 어디 다음에 호출 오전 때 나는 궁금이

logInAPI: function(req, res, next) { 
     if (!req.param('email') || !req.param('password')) { 

      var usernamePasswordRequiredError = [ 
       'You must enter a username and a password.' 
      ] 

      req.session.flash = { 
       err: usernamePasswordRequiredError 
      } 

      return next(); 
       } 
      else{// Log in user}; 
    } 

같다. 반환을 쓰면 어떻게됩니까? return next() 대신에;

답변

3

일부 값을 반환하는 대신 next()을 호출하는 이유는 미들웨어 작업의 비동기 직렬 연결을 허용하는 것입니다. 예를 들어

function(req, res, next){ 
    setTimeout(next, 1000); 
} 

이 1 초에 대한 응답을 지연 제외 아무것도하지 않는 쓸데없는 미들웨어의 예이다. 이 경우 특히 next()은 이후에 을 실행하고 함수가 반환됩니다.

보다 현실적인 시나리오에서 setTimeout()은 데이터베이스 가져 오기를 수행하고 콜백을 허용하는 로직으로 대체됩니다.

+0

답장을 보내 주셔서 감사합니다. sail.js 컨트롤러의 작동 범위에 궁금합니다. 그래서 next를 호출하면 logInAPI 함수를 호출 한 후 미들웨어의 어떤 함수가 실행되는지 알 수 있습니다. –

+1

나는 항해에 익숙하지 않다 .js. Express에서'next()'는 코드에서 선언 된 순서대로 다음 미들웨어로 제어권을 넘겨줍니다. 또한 항상 다음에 전화 할 필요는 없습니다. 예를 들어'req.end()'를한다면, 반드시 다음 것을 제어 할 필요는 없다. 죄송합니다 더 도움이 될 수 없습니다. – greim

+0

Express에서는 어떤 함수가 어떤 함수를 호출 하는지를 알기 위해 미들웨어 스택을 어디에서 찾을 수 있는지 알고 있습니다. –

관련 문제