我们是仅在中间件或没有路由的功能中使用它吗?我在我的身份验证文件中使用过它......
function ensureAuthenticated(req, res, next){
if(req.isAuthenticated()){
return next();
} else {
req.flash('error_msg' , 'Please login First...')
res.redirect('/users/login');
}
}
答案 0 :(得分:3)
您执行它是为了执行管道中的下一个中间件。如果您不手动执行它,您可能会将其传递给另一个为您执行它的模块。否则,如果您不执行next
,则会缩短“管道”,即您的管道是最后运行的中间件。
在您的情况下,在用户通过身份验证时调用next()
非常有意义。这将控件传递给下一个中间件。在您已经确定用户未经过身份验证的情况下,不要调用next()
也是有意义的,因为在大多数情况下,您不希望执行“管道”中的其余中间件。
所以是的,next()
被中间件或模块用于中间件调用。
我希望能回答你的问题。
答案 1 :(得分:3)
如果你在这里谈论Express框架 - next
函数只是一个回调,告诉这个特定的中间件处理程序应该在Express中间件链中执行下一个操作。
如果您定义任何带有签名someHandler(req, res, next)
的处理程序并将其注册到app.use
,它将成为该链的一部分。本质上它只是一个特殊的回调函数 - 忽略函数本身的用途 - 路由控制器,身份验证,正文解析器等。