Node.js 初始化全局类并使其在整个节点应用程序中可用

Node.js 初始化全局类并使其在整个节点应用程序中可用,node.js,ecmascript-6,apple-push-notifications,es6-class,Node.js,Ecmascript 6,Apple Push Notifications,Es6 Class,因此,我在当前项目中有一个地方,我正在初始化APN(Apple Push Notification)连接,但我需要初始化一个,因为我只需要一个连接实例。目前,我有一个类创建连接,并将我们所需的侦听器放在连接上,以监视错误等。它看起来像这样: export default class pushService { constructor(options) { ... check that options is proper ... this.apnConne

因此,我在当前项目中有一个地方,我正在初始化APN(Apple Push Notification)连接,但我需要初始化一个,因为我只需要一个连接实例。目前,我有一个类创建连接,并将我们所需的侦听器放在连接上,以监视错误等。它看起来像这样:

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连接实例

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


另外,如果这太主观了,我很抱歉,但我认为我在谷歌搜索中还没有看到这个问题,也没有找到答案,而且似乎有一个或多个好的解决方案。

我找到的最佳答案是基于以下博文:

最后,我的数据库连接如下所示:

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
    }
}
let instance=null;
导出类数据库连接{
构造函数(){
如果(!实例)
实例=dbConnectionLibrary();
返回实例;
}
}

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

可能重复@tcooc,我不这么认为,因为我要问的问题是如何创建一个类的实例,我举了一个例子,我必须在其中创建在构造时输入变量?只需创建类的实例,并执行
global.foo=instance。我想指出@DaveDopson对他的回答的回答:“具体而言,在全球范围内,问题在于可读性。如果您的程序乱七八糟地使用全局变量,这意味着为了理解代码,我必须了解整个应用程序的动态运行时状态。这就是为什么程序员对全局变量持怀疑态度。我相信有几十种方法可以有效地使用它们,但我们大多只是看到初级程序员滥用它们,导致产品出现问题。”我想这或多或少概括了我为什么要尝试看看是否有一种更好的方法是“最佳实践”"? 但也许是这样。使用global绝对不是最佳做法。你的问题是非常主观的,涉及软件设计和依赖注入,所以我认为这不是真的可以回答的。一个简单的解决方案是让一个“库”模块导出类,另一个“实例”模块导出类的实例。这可能对你有用。