初始化全局 Class 并使其在整个节点应用程序中可用

Initializing Global Class and Making it Available Throughout Node Application

因此,我在当前项目中有一个地方正在初始化 APN(Apple 推送通知)连接,但我需要对其进行初始化,因为我不需要多个连接实例。目前我有一个 class 创建连接并将我们需要的侦听器放在连接上以监视错误等。它看起来像这样:

export default class pushService {
    constructor(options) {
        ... check that options is proper ...

        this.apnConnection = apn.Provider(options);

        ... add listeners ...
    }

    sendMessage(message, recipents) {
        this.apnConnection.send() messages
    }
}

现在可能有多个位置需要使用它,但正如我所说,我更希望整个应用程序只有一个连接的 APN 连接实例。

那么,最好是在应用程序的主文件中初始化它并使其成为命名导出,还是应该以其他方式启动?如果可以避免的话,我不认为导入整个主应用程序文件是个好主意,但也许这样做没有问题?

此外,如果这太主观了,我很抱歉,但我认为我没有在这里看到这个问题,也没有在我的 Google 搜索中回答,而且看起来可能有一个或多个好的解决方案。

我找到的最佳答案基于此博客post:

ES6 Modules - Single Instance Pattern

最后我的数据库连接是这样的:

let instance = null;

export class dbConnection {
    constructor() {
        if(!instance)
            instance = dbConnectionLibrary();

        return instance;
    }
}

我计划对我的推送通知服务做同样的事情,并可能扩展 dbConnection class 以将连接添加到连接数组中,因为我们有一个新要求需要在启动时连接多个不同的数据库.