Node.js 如何将参数从Express route传递到节点中间件
我在文档中找不到答案,我希望有办法满足我的需求。我有一些特快路线:Node.js 如何将参数从Express route传递到节点中间件,node.js,express,keystonejs,Node.js,Express,Keystonejs,我在文档中找不到答案,我希望有办法满足我的需求。我有一些特快路线: app.post( '/submit-agency-event' , eventService.submitEvent ); app.post( '/submit-question' , formService.submitQuestion ); app.post( '/submit-information-request' , formService.submitIn
app.post( '/submit-agency-event' , eventService.submitEvent );
app.post( '/submit-question' , formService.submitQuestion );
app.post( '/submit-information-request' , formService.submitInformationRequest );
app.post( '/social-worker-register-family' , familyService.registerFamily );
其中,每个路由使用中间件文件中的一个函数来处理请求。我想将一条路由限制为只有几个用户类型(存储在req.user.userType
上)。我想设置与以下类似的路线:
app.post( '/social-worker-register-child' , middleware.requireUsersOfType( ['admin, social worker'] ), childService.registerChild );
然后使用函数requireUsersOfType()
在调用childService.registerChild()之前处理处理和任何需要的重定向
exports.requireUsersOfType = ( req, res, next, userTypesArray ) => {
// processing
};
exports.requireUsersOfType = ( req, res, next, userTypesArray ) => {
// processing
};
我似乎不知道如何将参数传递到requireUsersOfType()
函数中。有人知道如何做到这一点吗?您可以使用:
闭包是函数和词汇环境的组合
其中声明了该函数
例如:
exports.requireUsersOfType = (userTypesArray) => {
return function(req, res, next) => {
// your code...
}
};
虽然不是最优雅的解决方案,但如果您无法按照其他人的建议使其正常工作,这应该可以做到:
app.post( '/social-worker-register-child', function( req, res, next ) { middleware.requireUsersOfType( req, res, next, userTypes = ['admin, social worker'] ); }, childService.registerChild );
然后,您应该能够根据需要在中间件中进行处理: