gpt4 book ai didi

javascript - 如何在 express 中装饰应用程序方法?

转载 作者:搜寻专家 更新时间:2023-10-31 23:42:23 24 4
gpt4 key购买 nike

我使用 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);
}
}

我的想法是在我已有的代码之前执行自定义逻辑,但我需要访问我内部的 reqresnext 对象自定义函数。另一个问题是我需要有 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
});

关于javascript - 如何在 express 中装饰应用程序方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com