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