我想知道如果回调中没有'req'参数,如何访问req对象。
这是场景吗?
在ExpressJs中,我有一个通用函数,它用于处理带有'req'对象的事物,但不将req传递给它。
module.exports = {
get: function(){
var req = global.currentRequest;
//do something...
}
}
Run Code Online (Sandbox Code Playgroud)
我当前的解决方案是我为所有请求编写一个中间件,将'req'放入全局变量,然后可以使用'global.currentRequest'在任何地方访问'req'。
// in app.js
app.use(function (req, res, next) {
global.currentRequest= req;
next();
});
Run Code Online (Sandbox Code Playgroud)
但我不知道这是否好?谁能提出建议?
非常感谢!
唯一正确的方法是将req对象作为参数传递给需要它的所有函数。
将其存储在全局中根本无法工作,因为如果任何请求将异步调用作为其处理的一部分,则多个请求可以同时处理,并且这些多个请求会相互脚,从而难以跟踪错误。这里没有捷径。将当前请求作为参数传递给需要它的任何代码。
您永远无法将特定于请求的数据放入node.js中的全局变量。这样做将为同时进行的两个请求创造机会,使彼此之间相互脚,并使数据在请求之间变得混乱。请记住,这是一台可能正在处理许多客户端请求的服务器。您不能对服务器使用一次一次的同步思考。一个node.js服务器可能同时具有多个处于运行状态的请求,因此普通全局变量不能用于特定于请求的数据。
这里没有捷径。您只需要将req对象传递给需要它的函数即可。如果那意味着您必须更改几个中间函数的函数签名,那就可以了。那就是你要做的。这是解决此类问题的唯一正确方法。
在某些情况下,您可能可以使用闭包来“捕获”所需的req对象,然后在内部函数中使用它而不将其传递给那些内部函数,但这听起来并不像您的函数结构那样。我们必须查看更多您的实际/实际代码,才能知道是否有这种可能。
| 归档时间: |
|
| 查看次数: |
4242 次 |
| 最近记录: |