私はバックエンドNode.jsアプリケーションでTypescript(2.5.3)を使用しています。次のコード。簡単に言うと、私は1つのメインクラスを持っており、このメインクラスを使用する他のいくつかのクラス:Node.js&Typescriptシングルトンパターン:シングルトンがシングルトンユーザー間で共有されていないようです
データベース(メインクラス):
- 役割シングルトン(下記
export let DB = DataBase.Instance;
を参照) - です単にMongoデータベースに接続し、接続が成功したかどうかを示すフラグを設定するだけです。このフラグは、他のクラスが接続が確立されたかどうかを知るために使用されます。
ModelParametersDataBase(他のクラスの1つ):
- このクラスはメインクラス(以下
import { DB } from './DataBase' ;
参照) - メインクラスを介して接続状態を取得しインポート。
は、ここに私の問題です: 私の問題は、接続は(DB.dataBaseStatus = true
が呼ばれた)が一度確立し、すべてのためであっても、シングルトンのゲッターを呼び出すとき、ModelParametersDataBaseはfalse
を取得していることです。ここで
が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;
ここ姉は私がModelParametersDataBase
クラスでこのシングルトンを使用する方法である:私のミスがどこにある
import { DB } from './DataBase' ;
export class ModelParametersDataBase {
public static getModelParameters(): Promise<IModelParameters> {
return new Promise((resolve, reject) => {
if (DB.dataBaseStatus) {
// do stuff
} else {
reject(Error(CANNOT_REACH_DB));
}
});
}
}
あなたが指摘していただけますか?ありがとう。
この回答ありがとうございます。しかし、問題は変わりません。私のdatabaseStatus_変数siは正しくtrueに設定されていますが、データベースインスタンス経由で値を取得するときはfalseです。 より正確に言うと、クラスのデフォルトで定義されている値にとどまっています。デフォルト値がtrueに設定されている場合、データベースインスタンスを介してtrueになります。 – LudoZik
静的でないため、this.databaseStatusを設定する必要があります。 –