node.js - 表达多个回调在 app.get 中的工作方式

标签 node.js express asynccallback

我是 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/

相关文章:

javascript - 如何使我的所有路由都具有 https 并强制从 http 到 https?

javascript - 无法存储线串和多边形 - MEAN + Mongoose

javascript - nodeJs 回调简单示例

javascript - 使用异步状态设置从类转换为功能组件

node.js - 使用 ts-node 时通过 fork() 调用子进程

javascript - 为什么Sequelize将 'media'复数为medium

node.js - Express.js 不使用/删除虚拟主机?

javascript - 无法在 node.js 中打印数组

javascript - React Native AsyncStorage 调用无效,不进入回调或 .then

node.js - 当Node.js进入uv_io_poll时