我怎样才能将参数从Express路由传递到Node中间件

我无法在文档中find答案,我希望有办法做我所需要的。 我有一些快递路线:

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 ); 

每个路由使用中间件文件中的函数来处理请求。 我想限制一个路由只有一些用户types(这是存储在req.user.userType )。 我想设置类似于以下的路线:

 app.post( '/social-worker-register-child' , middleware.requireUsersOfType( ['admin, social worker'] ), childService.registerChild ); 

那么在调用requireUsersOfType() ,使用函数requireUsersOfType()来处理处理和任何所需的redirect。

 exports.requireUsersOfType = ( req, res, next, userTypesArray ) => { // processing }; 

我似乎无法弄清楚的是如何将parameter passing给requireUsersOfType()函数。 有谁知道这可以做到吗?

您可以使用闭包 :

闭包是一个函数和声明该函数的词法环境的组合。

例:

 exports.requireUsersOfType = (userTypesArray) => { return function(req, res, next) => { // your code... } }; 

虽然不是最优雅的解决scheme,但如果你不能像其他人所build议的那样工作,这应该可以做到这一点:

 app.post( '/social-worker-register-child', function( req, res, next ) { middleware.requireUsersOfType( req, res, next, userTypes = ['admin, social worker'] ); }, childService.registerChild ); 

然后,您应该可以根据需要在中间件中进行处理:

 exports.requireUsersOfType = ( req, res, next, userTypesArray ) => { // processing };