我的Node.js应用程序出了问题。简而言之,我想将自定义参数传递到我的中间件功能,而不仅仅是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) {}
会有效,但我不明白如何包含我自己的参数。
答案 0 :(得分:2)
您的函数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
}
}
}
}
答案 1 :(得分:1)
您可以为中间件创建一个匿名函数,让您通过一些额外的参数调用实际函数:
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)