如何将参数从Express路由传递到Node中间件

时间:2017-07-31 00:20:40

标签: node.js express keystonejs

我在文档中找不到答案,我希望有办法做我需要的。我有一些快速路线:

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

其中每个路由使用中间件文件中的函数来处理请求。我想将一个路由限制为只有几个userTypes(存储在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
};

我似乎无法弄清楚如何将参数传递给requireUsersOfType()函数。有谁知道如何做到这一点?

2 个答案:

答案 0 :(得分:0)

您可以使用Closures

  

闭包是函数和词汇环境的结合   宣布该职能的地方。

示例:

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

答案 1 :(得分:0)

虽然不是最优雅的解决方案,如果你不能像其他人所建议的那样让它工作,这应该可以解决问题:

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