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

 harekoc_303 发布于 2023-01-19 10:18

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

app.get('/users', user.list);

但在护照 - 谷歌的例子中,我发现他们称之为

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 个回答
  • 在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
    }
    

    2023-01-19 10:19 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有