我怎样才能将参数从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 };