在快速中间件中提供自定义参数

我有我的Node.js应用程序的问题。 总之,我想将自定义parameter passing到我的中间件function,而不仅仅是reqresnext

中间件文件:

 var DB = require('./DB.js'); function requirePermissions(e) { console.log('nope') } module.exports = requirePermissions; 

路线:

 router.post('/posts', requirePermissions('post_creation'), function(req, res) { var o = req.body, title = o.post.title, content = o.post.content; res.send('made it'); }); 

我已经确认使用函数requirePermissions(req, res, next) {}将工作,但我不明白如何包含我自己的参数。

你的函数requirePermissions应该返回另一个函数,它将是实际的中间件:

 function requirePermissions(e) { if (e === 'post_creation') { return function(req, res, next) { // the actual middleware } } else if (e === 'something_else') { return function(req, res, next) { // do something else } } } 

你也可以这样做:

 function requirePermissions(e) { return function(req, res, next) { if ('session' in req) { if (e === 'post_creation') { // do something } else if (e === 'something_else') { // do something else } } } } 

你可以为你的中间件创build一个匿名函数,让你用一些额外的参数来调用你的实际函数:

 router.post('/posts', function(req, res, next) { requirePermissions('post_creation', req, res, next); }, function(req, res) { var o = req.body, title = o.post.title, content = o.post.content; res.send('made it'); }); 

或者,您可以使用.bind()来预先参数:

 router.post('/posts', requirePermissions.bind('post_creation'), function(req, res) { var o = req.body, title = o.post.title, content = o.post.content; res.send('made it'); }); 

这将使用如下四个参数调用您的requirePermissions()函数:

 requirePermissions('post_creation', req, res, next)