gpt4 book ai didi

node.js - 在 Node.js Express 中随处访问当前请求对象

转载 作者:搜寻专家 更新时间:2023-10-31 22:32:45 33 4
gpt4 key购买 nike

我想知道如果回调中没有“req”参数,如何访问 req 对象。

场景是这样的:
在 ExpressJs 中,我有一个通用函数,它用于处理带有“req”对象的内容,但不将 req 传递给它。

module.exports = {
get: function(){
var req = global.currentRequest;
//do something...
}
}

我目前的解决方案是为所有请求编写一个中间件,将“req”放入全局变量中,然后我可以使用“global.currentRequest”在任何地方访问“req”。

// in app.js
app.use(function (req, res, next) {
global.currentRequest= req;
next();
});

但不知道好不好用?任何人都可以提出建议吗?
非常感谢!

最佳答案

唯一正确的方法是将 req 对象作为参数传递给所有需要它的函数。

将其存储在全局中根本行不通,因为如果任何请求使用异步调用作为其处理的一部分,则可以同时处理多个请求,并且这些多个请求将相互干扰,从而难以追踪错误.这里没有捷径。将当前请求作为参数传递给任何需要它的代码。

您永远不能将特定于请求的数据放入 node.js 中的全局变量中。这样做会给同时进行中的两个请求创造机会,使它们相互干扰,并使数据在请求之间混淆。请记住,这是一个可能处理许多客户端请求的服务器。您不能对服务器使用同步的、一次一个的思维方式。一个 node.js 服务器可能同时有许多请求都在运行,因此普通的全局变量不能用于特定于请求的数据。

这里没有捷径。您只需将 req 对象传递给需要它的函数。如果这意味着您必须更改几个中间函数的函数签名,那就这样吧。那就是你必须做的。这是解决此类问题的唯一正确方法。

在某些情况下,您可以使用闭包来“捕获”所需的 req 对象,然后在内部函数中使用它而不将其传递给那些内部函数,但它不会听起来这就是你的功能结构。我们必须查看更多您的真实/实际代码才能知道这是否可行。

关于node.js - 在 Node.js Express 中随处访问当前请求对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39339640/

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