在快速中间件中提供自定义参数
我有我的Node.js应用程序的问题。 总之,我想将自定义parameter passing到我的中间件function,而不仅仅是req
, res
和next
。
中间件文件:
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)