为什么我们使用next()函数?

时间:2017-10-27 07:14:14

标签: javascript node.js express

我们是仅在中间件或没有路由的功能中使用它吗?我在我的身份验证文件中使用过它......

function ensureAuthenticated(req, res, next){
if(req.isAuthenticated()){
    return next();
  } else {
    req.flash('error_msg' , 'Please login First...')
    res.redirect('/users/login');
  }
}

2 个答案:

答案 0 :(得分:3)

您执行它是为了执行管道中的下一个中间件。如果您不手动执行它,您可能会将其传递给另一个为您执行它的模块。否则,如果您不执行next,则会缩短“管道”,即您的管道是最后运行的中间件。

在您的情况下,在用户通过身份验证时调用next()非常有意义。这将控件传递给下一个中间件。在您已经确定用户未经过身份验证的情况下,不要调用next()也是有意义的,因为在大多数情况下,您不希望执行“管道”中的其余中间件。

所以是的,next()被中间件或模块用于中间件调用。

我希望能回答你的问题。

答案 1 :(得分:3)

如果你在这里谈论Express框架 - next函数只是一个回调,告诉这个特定的中间件处理程序应该在Express中间件链中执行下一个操作。

如果您定义任何带有签名someHandler(req, res, next)的处理程序并将其注册到app.use,它将成为该链的一部分。本质上它只是一个特殊的回调函数 - 忽略函数本身的用途 - 路由控制器,身份验证,正文解析器等。