在表达多个回调如何在app.get中工作

时间:2014-03-09 17:46:10

标签: node.js express asynccallback

我是节点中的新手,所以如果我不明显,请原谅我。 在node.js表达app.get函数的应用程序中,我们通常将路由和视图作为参数传递 例如

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被串行调用。

对于我的特定要求,我发现在上面的表格中顺序调用函数是非常优雅的解决方案而不是使用异步系列。有人可以解释一下它是如何工作的,以及我如何能够实现类似的功能。

1 个答案:

答案 0 :(得分:8)

在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
}