Javascript node.js是否将HTTP服务器的请求和响应设置为全局?

Javascript node.js是否将HTTP服务器的请求和响应设置为全局?,javascript,node.js,httpserver,Javascript,Node.js,Httpserver,我刚刚开始使用node.js,并已运行了一遍。很好的开始教程,但我真的想知道是否有可能使请求和响应都成为“全局”的,以便为当前传入请求加载的任何模块都可以访问这些。。。而不是注射 Ideas?与大多数web脚本语言不同,在节点中,来自不同客户端的许多HTTP请求可以同时处于“活动”状态。你怎么知道你在回应哪个客户 因此,尽管您认为在任何给定时间只有一个请求和响应,但实际上所有当前客户端都有打开的请求 由于异步事件循环,理论上可以使reques和response varibale全局可用……但是,

我刚刚开始使用node.js,并已运行了一遍。很好的开始教程,但我真的想知道是否有可能使请求和响应都成为“全局”的,以便为当前传入请求加载的任何模块都可以访问这些。。。而不是注射


Ideas?

与大多数web脚本语言不同,在节点中,来自不同客户端的许多HTTP请求可以同时处于“活动”状态。你怎么知道你在回应哪个客户


因此,尽管您认为在任何给定时间只有一个请求和响应,但实际上所有当前客户端都有打开的请求

由于异步事件循环,理论上可以使reques和response varibale全局可用……但是,一旦您从当前上下文返回(即使在调用其他异步内容时),队列中的下一个事件将被执行

现在考虑另一个HTTP客户机同时连接。它将再次改变全局变量,您将丢失旧的。所以最终,你的方法是泄漏的


由于只有一个线程执行您自己的代码,所以很明显,一切都是线程安全的。但是您仍然必须防止出现无效状态(变量等),因为您永远不知道下一个要执行的事件/回调是什么。

这应该是可能的,但这需要一个数组来保存对响应和请求对象的引用。 然后,您必须告诉模块在数组中查找对象的索引位置。此外,还必须清理阵列。因此,您无法真正避免向模块传递一些信息

最好将请求和响应对象引用直接传递给模块

请记住,对象是通过引用传递的,因此将对象传递给函数/模块时不会有太大的开销。

节点域

我知道这是一个老问题,但没有一个答案是完全正确的

事实上,您可以通过使用节点域来实现此功能

全局变量通常被认为不好用,因为它们破坏了封装,而正确封装的应用程序是良好设计的第一个构建块,因为应用程序更易于读取、测试和重构

尽管如此,我个人遇到了许多在单个请求范围内使用全局变量的好用例

范例 如果没有这一点,通过多个代码层跟踪单个请求将变得不可能,除非您将请求(或req ID)公开到它不属于的层。(即服务、DAL等……将您的请求保存在您的控制器中,如果它属于您)

基本上,通过多个层传递变量只是为了在我的应用程序的较低级别上访问它们是不可持续的,这会使代码非常混乱

在您开始尖叫之前,是的,我知道自节点5起,域已被弃用,而且我还知道,这并不是所记录的域的确切用例。但是节点现在正在完成一个新的API,有望继续解决这个问题

解决了这个问题。如果我理解正确的话,它与域有一些相似之处,只是没有被弃用D


解释一下。而且。

您所说的是正确的,但您实际上可以使用节点域来实现他的要求。请看下面的帖子。我想这个答案只是重申了这个问题。有很多选择。域和延续本地存储。平心而论,我不确定这两个选项在发布时是否可用。