2017-07-31 92 views
1

我无法在文档中找到答案,我希望有办法满足需要。我有一些快速路由:如何将参数从快速路由传递到节点中间件

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

似乎我无法弄清楚是如何将参数传递到requireUsersOfType()功能。有谁知道这可以做到吗?

回答

0

您可以使用Closures

闭包是一个函数,词法环境 所以在其中宣称功能的组合。

例子:

exports.requireUsersOfType = (userTypesArray) => { 
    return function(req, res, next) => { 
    // your code... 
    } 
}; 
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 
};