node.js - return 语句如何在 Node 中工作

标签 node.js express

我是ExpressJs的新手,我不清楚中间件的返回语句。请参阅下面的代码:-

中间件.js

exports.checkPrivilege = (stateName, forPrivilege) => {
    return (req, res, next) => {  // THIS LINE MAKE CONFUSE, i.e, req, res and next

    }
}

模块.js

.....
.....
router.post('/create', checkPrivilege('module', 'write'), (req, res, next) => {

});

最佳答案

这意味着 checkPrivilege() 是一个函数,调用时会返回另一个函数。在本例中,它返回一个具有正确格式的函数,可用作中间件处理程序。

因此,当调用 checkPrivilege(x,y) 时,它会返回另一个函数(尚未执行),然后可以将其用作中间件。

所以,当你看到这个时:

router.post('/create', checkPrivilege('module', 'write'), (req, res, next) => {
    // code here
    next();
});

这将执行以下步骤:

  1. /create 路由创建 POST 路由处理程序。
  2. 立即调用 checkPrivilege('module', 'write') 并返回另一个函数作为返回值,该函数成为 /create 路由的中间件处理程序。
  3. 然后为 /create 路由定义一个内联匿名路由处理函数,该函数将在中间件处理程序完成后运行。

为了清楚起见,也可以写成:

// create middleware function
let checkPrivilegeMiddleware1 = checkPrivilege('module', 'write');

// create route handler with middleware
router.post('/create', checkPrivilegeMiddleware1, (req, res, next) => {
    // code here
    next();
});

这样做的典型原因是,这是一种使中间件可以使用某些参数 stateNameforPrivilege 的简单方法,而无需创建另一个内联函数体。这样,checkPrivilege() 函数就可以在代码中的多个位置使用,每个位置都有自己的 stateNameforPrivilege 设置 - 因此更具可重用性。

关于node.js - return 语句如何在 Node 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48494896/

相关文章:

javascript - res.render() 的目标中可用的 node.js javascript var

node.js - 长轮询的硬缺点?

node.js - 在 Express 中,app.router 究竟做了什么?

javascript - 如何将输入框中的值添加到数组中,然后输出其内容?

javascript - 对象解构 ES6 类

javascript - 在注册过程中从外部 API 验证用户名匹配

node.js - 如何停止rabbitmq服务器

mysql - 避免在 Node js 中的 SQL LIKE 查询中注入(inject)

javascript - 如何生成包含非零元素索引的张量?

javascript - node.js 多人 html5 游戏中的延迟越来越高