Leo*_*ssi 7 javascript global-variables node.js express
我有一个基本的快速服务器,需要在每个请求处理期间存储一些全局变量.更深入的是,请求处理涉及许多需要存储在变量中的操作,例如global.transaction[]
当然,如果我使用global范围,每个连接将共享其事务的信息,我需要一个全局范围,因为我需要在执行期间从许多其他模块访问事务数组.
有关这个问题的任何建议吗?我觉得这是非常微不足道的事情,但我正在寻找复杂的解决方案:)
非常感谢!
更新 这是一个案例场景,更清楚.
在每次请求我有3个模块(ModuleA,ModuleB,ModuleC),其读出的10个随机文件的内容在一个目录中.我想跟踪每个请求读取的文件名列表,并返回res.write列表.
因此,ModuleA/B/C需要访问某种全局变量,但名单request_1,request_2,request_3等...没有混淆.
Ben*_*aum 10
这是我的建议,避免像火一样的全球状态.
您希望应用程序的每个部分使用的代码部分尽可能明确.这是一个很大的问题.
我们希望跨多个请求同步状态并相应地执行操作.在编写软件时这是一个非常大的问题 - 有人说甚至是最大的问题.不能过高估计应用程序中对象通信方式的重要性.
有多种方法可以在节点服务器中跨请求或服务器范围完成共享状态.这取决于你想做什么.这是两个最常见的imo.
同样,有很多方法可以做到这一点.以下是我最常见的两个.
这种方式请求发出事件.应用程序读取请求触发的事件并相应地了解它们.应用程序本身可以是您可以从外部观察的事件发射器.
你可以这样做:
request.emit("Client did something silly",theSillyThing)l
Run Code Online (Sandbox Code Playgroud)
如果你选择的话,从外面听它.
这就像一个事件发射器,但相反.您在请求上保留一个依赖项列表,并在请求发生一些有趣的事情时自己调用一个处理程序方法.
就个人而言,我通常更喜欢事件发射器,因为我认为他们通常会更好地解决问题.
这听起来不仅仅是琐碎.再次,这里有几种方法.他们的共同点是我们将共享服务
而不是具有全局状态 - 每个请求都可以访问服务 - 例如,当您读取文件时通知服务以及何时需要读取文件列表 - 您可以询问服务.依赖中的一切都是明确的.
该服务不是全局的,只是它的依赖性.例如,它可以协调资源和数据,是某种形式的存储库).
以下是我在您的案例中要做的两个选项.它远非唯一的解决方案.
第一种选择:
第二种选择:
这两种方法都有优点和缺点.可能需要一个更复杂的解决方案(这两个在实践中非常简单),其中服务进一步抽象,但我认为这是一个良好的开端.
| 归档时间: |
|
| 查看次数: |
5298 次 |
| 最近记录: |