我在后端Node.js应用程序中使用Typescript(2.5.3),并试图找出我的编码错误在哪里,在下面的代码中。简而言之,我有一个主类,以及其他几个使用这个主类的类:
数据库(主要类):
export let DB = DataBase.Instance;
)ModelParametersDataBase(其他类之一):
import { DB } from './DataBase' ;
) 以下是我的问题:
我的问题是,即使连接是一劳永逸地建立(DB.dataBaseStatus = true
),ModelParametersDataBase在调用单例的getter时得到false
。< / p>
以下是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));
}
});
}
}
你能指出我的错误在哪里吗?感谢。
答案 0 :(得分:0)
您正尝试使用静态上下文中的this
关键字实例化类。
为什么不做更像这样的事情:
class DataBase {
private static instance = new DataBase();
public static getInstance = () => DataBase.instance;
}
export default DataBase;
然后像这样使用它:
import DataBase from './DataBase';
Database.getInstance();
甚至可以从文件中导出单个实例:
class DataBase {};
export default new DataBase();
编辑:
此外,在设置this
等实例变量时,您应该使用databaseStatus
关键字。