首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js共享对象或单例,以确保一个单一的真实来源

Node.js共享对象或单例,以确保一个单一的真实来源
EN

Stack Overflow用户
提问于 2015-09-02 18:08:03
回答 1查看 724关注 0票数 2

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

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

示例:

在init中,我可以从API中获得:

代码语言:javascript
复制
{
    "amysCar": {
        "name": "2016 Lamborghini Gallardo LP 550-2",
        "queue": "/queues/amysracingstats"
    },
    "bobsCar": {
        "name": "1967 Ford Mustang Shelby Shelby GT500",
        "queue": "/queues/bobsrestorationproject"
    }
}

那么,假设Bob决定不再发布他的恢复项目;他将对Node服务器DELETE /projects/bobsCar进行API调用。我将从队列数组中删除队列侦听器,并更新后端db。

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

我意识到,众所周知,在Node中编写和管理单例是非常困难的,受到反对,而且据称是completely unnecessary,因为Node.js模块缓存据说只加载模块的单个实例。如果这是正确的,我可以简单地将队列订阅数组存储为模块中的私有对象,然后将其存储在require调用控制器中。

  1. 这是真的吗?我能用这个能力来满足我的要求吗?
  2. 如果是这样的话,我将如何覆盖模块的初始化,以便能够进行初始后端调用以获得当前状态?
  3. 我是不是想过头了?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-02 18:34:13

  1. 这是真的吗?我能用这个能力来满足我的要求吗?

是的,这是真的。只需使用模块属性即可。由于模块缓存,只有一个这样的属性。

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

我假设模块本身只是进行后端调用来初始化状态。它可以在第一次加载或通过第一个模块构造函数调用时执行。

  1. 我是不是想过头了?

您似乎已经了解模块缓存以及模块属性如何作为单例工作,因此如果您仍然试图避免使用该功能,那么这将是过度考虑。但是,如果你只是在确认事情在依赖它之前是如何运作的,那就没问题了。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32360242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档