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

Javascript 了解express.js/sail.js控制器范围内的下一个中间件,javascript,node.js,model-view-controller,express,sails.js,Javascript,Node.js,Model View Controller,Express,Sails.js,我使用的是构建在express.js之上的sails.js。 在my routes.js中,我定义了一个如下所示的路由 '/account/login': { controller : 'Session', action : 'logInAPI' }, 我的会话控制器是这样的 logInAPI: function(req, res, next) { if (!req.param('email') || !req.param('pa

我使用的是构建在express.js之上的sails.js。 在my 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};
  }

我想知道下一次打电话的时候,它指的是middlewear的什么地方。如果只写返回会发生什么;而不是返回next()

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

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


在一个更现实的场景中,
setTimeout()
当然会被一些执行数据库获取并接受回调的逻辑所取代,例如。

非常感谢您的回答,我想知道sail.js的范围内控制器是如何工作的。所以当我调用next时,在调用logInAPI函数之后,中间件中的哪个函数会被执行。我对sail.js不太熟悉。在Express中,
next()
按照代码中声明的顺序将控制权传递给下一个中间件。你也不必总是打电话给下一个。例如,如果执行
req.end()
,则不一定需要将控制权传递给下一个操作。抱歉,我帮不上什么忙。在express中,您知道在哪里可以找到中间件堆栈,以查看在哪个函数之后调用哪个函数。在香草express中,您可以自己编写中间件堆栈。简单阅读一下sail.js文档,我猜您的控制器运行在中间件堆栈的末尾,而“策略”是一个中间件,您可以(可选)在堆栈中的控制器之前插入它。在我花的两分钟里,我没有看到任何sail.js控制器调用
next()
的例子。