【问题标题】:Understanding next middle-ware in the scope of express.js / sail.js controller了解 express.js/sails.js 控制器范围内的下一个中间件
【发布时间】:2014-02-14 18:51:30
【问题描述】:

我使用的是建立在 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};
  }

我想知道我什么时候打电话下一个它指向中间件的哪里。如果只写return会发生什么;而不是 return next();

【问题讨论】:

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


    【解决方案1】:

    之所以调用next() 而不是仅仅返回一些值是为了允许中间件操作的异步串行链接。例如:

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

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

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

    【讨论】:

    • 非常感谢您的回答,我想知道在sail.js 的范围内控制器是如何工作的。因此,当我调用 next 时,调用 logInAPI 函数后会执行中间件中的哪个函数。
    • 我对sail.js 不太熟悉。在 Express 中,next() 按照代码中声明的顺序将控制权传递给下一个中间件。此外,您并不总是需要调用下一个。例如,如果您执行req.end(),则不一定需要将控制权传递给下一件事。抱歉,无法提供更多帮助。
    • 在 express 中你知道我在哪里可以找到中间件堆栈以查看哪个函数在哪个函数之后调用。
    • 在 vanilla Express 中,您将自己编写中间件堆栈。简要阅读sail.js 文档,我的猜测是您的控制器在中间件堆栈的末尾运行,并且“策略”是一个中间件,您可以(可选)在堆栈中的控制器之前插入它。在我花费的两分钟内,我没有看到任何调用 next() 的sail.js 控制器的示例。
    猜你喜欢
    • 2012-07-01
    • 2016-10-03
    • 2014-10-23
    • 2017-02-19
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    相关资源
    最近更新 更多