Patrón de Node.js y Typescript Singleton: parece que singleton no se comparte entre usuarios de singleton

Estoy usando Typescript (2.5.3) en una aplicación Node.js de back-end, y estoy tratando de averiguar dónde está mi error de encoding, en el siguiente código. Brevemente, tengo una clase principal y varias otras clases que usan esta clase principal:

Base de datos (clase principal):

  • que es un singleton (ver export let DB = DataBase.Instance; continuación)
  • cuya función es simplemente conectarse a una base de datos Mongo y establecer un indicador si la conexión es exitosa o no. Esta bandera será utilizada por otras clases para saber si se estableció la conexión.

ModelParametersDataBase (una de las otras clases):

  • esta clase importa la clase principal (vea import { DB } from './DataBase' ; continuación)
  • obtiene el estado de conexión a través de la clase principal.

Aquí está mi problema: mi problema es que aunque la conexión se establece de una vez ( DB.dataBaseStatus = true se llama), ModelParametersDataBase se vuelve false cuando se llama al captador del singleton.

Aquí hay un fragmento de los DataBase.ts :

 class DataBase { private static _instance: DataBase = undefined; private dataBaseStatus_ = false ; public static get Instance() { return this._instance || (this._instance = new this()); } public get dataBaseStatus() { return this.dataBaseStatus_ ; } public set dataBaseStatus(status :boolean) { this.dataBaseStatus_ = status ; } public configDatabase() { /* Connect to Mongo DB */ mongoose.connect(MONGODB_CONNECTION_ROOT + MONGODB_DB_NAME, options) .then(() => { DB.dataBaseStatus = true ; debug('CONNECTED TO DATABASE '); }, err => { DB.dataBaseStatus = false ; debug('ERROR - CANNOT CONNECT TO DATABASE'); } ); } } /** Instantiate singleton */ export let DB = DataBase.Instance; 

Ane aquí es cómo uso este singleton en la clase ModelParametersDataBase :

 import { DB } from './DataBase' ; export class ModelParametersDataBase { public static getModelParameters(): Promise { return new Promise((resolve, reject) => { if (DB.dataBaseStatus) { // do stuff } else { reject(Error(CANNOT_REACH_DB)); } }); } } 

¿Puedes señalar dónde está mi error? Gracias.

Está intentando crear una instancia de clase con this palabra clave desde un contexto estático. ¿Por qué no hacer algo más como esto?

 class DataBase { private static instance = new DataBase(); public static getInstance = () => DataBase.instance; } export default DataBase; 

Y luego úsalo así:

 import DataBase from './DataBase'; Database.getInstance(); 

O incluso podrías exportar una sola instancia desde un archivo:

 class DataBase {}; export default new DataBase(); 

EDITAR: Además, debe usar this palabra clave al configurar variables de instancia como databaseStatus .