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 );
然后,您应该能够根据需要在中间件中进行处理: