我是 Node 的新手,所以如果我不明白,请原谅我。 在 node.js express 应用程序的 app.get 函数中,我们通常将路由和 View 作为参数传递 例如
app.get('/users', user.list);
但在 passport-google example我发现他们称它为
app.get('/users', ensureAuthenticated, user.list);
其中 ensureAuthenticated 是一个函数
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login')
}
简而言之,这意味着有多个回调在运行时被串联调用。我尝试添加更多功能以使其看起来像
app.get('/users', ensureAuthenticated, dummy1, dummy2, user.list);
我发现 ensureAuthenticated、dummy1、dummy2、user.list 被连续调用。
对于我的特定要求,我发现以上述形式顺序调用函数是非常优雅的解决方案,而不是使用异步系列。有人可以解释一下它是如何工作的,以及我一般如何实现类似的功能。
最佳答案
在 Express 中,路径后面的每个参数都按顺序调用。通常,这是一种实现中间件的方式(如您在提供的示例中所见)。
app.get('/users', middleware1, middleware2, middleware3, processRequest);
function middleware1(req, res, next){
// perform middleware function e.g. check if user is authenticated
next(); // move on to the next middleware
// or
next(err); // trigger error handler, usually to serve error page e.g. 403, 501 etc
}
关于node.js - 表达多个回调在 app.get 中的工作方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22285677/