Node.js共享对象或单例以确保单一来源的真相

我正在编写一个Node应用程序,该应用程序将根据从后端数据库中获取的configuration生成一个JMS队列订阅数组。 初始化后,我将从后端检索当前状态,但是之后我需要支持对Node服务器的入站API调用,以实时添加远程订阅(然后我将更新存储在后端的列表)。

在整个应用程序中只能有一个这个订阅数组的实例,并且它必须是真实的来源。

例:

在初始化,我会从API获得:

{ "amysCar": { "name": "2016 Lamborghini Gallardo LP 550-2", "queue": "/queues/amysracingstats" }, "bobsCar": { "name": "1967 Ford Mustang Shelby Shelby GT500", "queue": "/queues/bobsrestorationproject" } } 

那么让我们说,鲍勃决定他不再想发布他的修复工程; 他将对节点服务器DELETE /projects/bobsCar进行API调用。 我将从队列数组中移除队列侦听器并更新后端数据库。


在实践中,我需要能够从多个控制器访问JMS队列数组,因为处理API调用的控制器与处理队列订阅的控制器是分开的。

我知道身人士在Node中编写和pipe理是非常困难的,被人们所诟病,而且据说是完全没有必要的,因为Node.js模块caching据说只会加载一个模块的单个实例。 如果这是正确的,我可以将队列订阅数组作为私人对象存储在模块中,然后在API调用控制器中进行require

  1. 这是真的? 我可以使用这种能力来满足我的要求吗?

  2. 如果是这样,我将如何覆盖模块的初始化,以便我可以进行初始后端调用以获取当前状态?

  3. 我是否在意这个?

       

网上收集的解决方案 "Node.js共享对象或单例以确保单一来源的真相"

  1. 这是真的? 我可以使用这种能力来满足我的要求吗?

是的,它是真实的。 只需使用模块属性。 由于模块caching,只会有一个这样的属性。

  1. 如果是这样,我将如何覆盖模块的初始化,以便我可以进行初始后端调用以获取当前状态?

我会假设模块本身只会使后端调用来初始化状态。 它可以这样做,当第一次加载或通过第一个模块的构造函数调用。

  1. 我是否在意这个?

您似乎已经知道模块caching以及模块属性如何以singleton的方式工作,所以如果您仍然试图避免使用该function,那么这将是过度的。 但是,如果你只是依靠它来确认事情是如何工作的,那就没问题了。