我是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();
});
这将执行以下步骤:
- 为
/create
路由创建 POST 路由处理程序。 - 立即调用
checkPrivilege('module', 'write')
并返回另一个函数作为返回值,该函数成为/create
路由的中间件处理程序。 - 然后为
/create
路由定义一个内联匿名路由处理函数,该函数将在中间件处理程序完成后运行。
为了清楚起见,也可以写成:
// create middleware function
let checkPrivilegeMiddleware1 = checkPrivilege('module', 'write');
// create route handler with middleware
router.post('/create', checkPrivilegeMiddleware1, (req, res, next) => {
// code here
next();
});
这样做的典型原因是,这是一种使中间件可以使用某些参数 stateName
和 forPrivilege
的简单方法,而无需创建另一个内联函数体。这样,checkPrivilege()
函数就可以在代码中的多个位置使用,每个位置都有自己的 stateName
和 forPrivilege
设置 - 因此更具可重用性。
关于node.js - return 语句如何在 Node 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48494896/