Инициализация глобального класса и обеспечение его доступности в приложении Node

Таким образом, у меня есть место в моем текущем проекте, где я инициализирую соединение 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 для всего приложения.

Итак, лучше ли инициализировать это в главном файле приложения и сделать его именованным экспортом, или он должен быть инициирован каким-либо другим способом? Я не думаю, что импортировать весь основной файл приложения - это хорошая идея, если этого можно избежать, но, возможно, в этом нет проблем?

Кроме того, если это слишком субъективно, я извиняюсь, но это то, что я не думаю, что когда-либо спрашивал здесь и не отвечал в своем поиске в Google, и кажется, что это может иметь одно или несколько хороших решений.

1 ответ

Решение

Лучший ответ, который я нашел, был основан на этом сообщении в блоге здесь:

Модули ES6 - шаблон одного экземпляра

В конце концов, соединение с моей базой данных выглядит так:

let instance = null;

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

        return instance;
    }
}

Я планирую сделать то же самое для моих служб push-уведомлений и, возможно, расширить этот класс dbConnection, чтобы добавить соединение к массиву соединений, поскольку у нас есть новое требование о необходимости подключения нескольких различных баз данных при запуске.

Другие вопросы по тегам