javascript-如何装饰Express中的应用程序方法?

我使用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
});
上一篇:如何使用python-decorator包来装饰类方法?


下一篇:python-使用装饰器从类外部动态添加方法