了解express.js / sails.js控制器范围内的下一个中间件

时间:2014-01-23 23:26:42

标签: javascript node.js model-view-controller express sails.js

我正在使用基于express.js构建的sails.js。 在我的routes.js中,我定义了一条如下路线

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

我的会话控制器就像这样

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};
  }

我想知道我什么时候打电话给下一个指向中间装的地方。如果只写回来会发生什么;而不是返回next();

1 个答案:

答案 0 :(得分:3)

您调用next()而不是仅返回某个值的原因是允许异步串行链接中间件操作。例如:

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

这是一个无用的中间件的例子,除了延迟响应一秒钟之外什么都不做。请特别注意,在这种情况下,next()在函数返回后执行

在更现实的情况下,setTimeout()当然会被一些执行数据库提取并接受回调的逻辑所取代。例如。