我使用node.js并表达v4.12.我想通过自定义逻辑装饰所有app.get调用.
app.get(/*getPath*/, function (req, res, next) {
// regular logic
});
和我的自定义逻辑
customFunc() {
if (getPath === 'somePath' && req.headers.authorization === 'encoded user'){
//costum logic goes here
next();
} else {
res.sendStatus(403);
}
}
这个想法是在已有的代码之前执行自定义逻辑,但是我需要访问自定义函数中的req,res和next对象.还有另一个问题,我需要app.get参数与custumFunc中的请求模式一起使用.
我试图实现装饰器模式,如下所示:
var testfunc = function() {
console.log('decorated!');
};
var decorator = function(f, app_get) {
f();
return app_get.apply(this, arguments);
};
app.get = decorator(testfunc, app.get);
但是javascript抛出错误.
编辑
万一app.use()我只能得到像/ users / 22这样的req.path,但是当我像app.get(‘/ users /:id’,acl,cb)这样使用时,我可以得到req.route.path属性.它等于’/ users /:id’,这就是我的ACL装饰器所需要的.但是我不想为每个终结点调用acl函数,并尝试将其移动到app.use(),但需要req.route.path属性.
解决方法:
实施middleware的示例:
app.use(function(req, res, next) {
if (req.path==='somePath' && req.headers.authorization ==='encoded user'){
//costum logic goes here
next();
} else {
res.sendStatus(403);
}
});
如果您只想通过一种途径传递中间件,则可以这样实现:
app.get(/*getPath*/, customFunc, function (req, res, next) {
// regular logic
});