【发布时间】:2018-07-08 14:34:21
【问题描述】:
我使用 NodeJS/ES6 创建了一个 MongoDB 连接器类。
class DBClient {
constructor(host, port) {
this.host = host;
this.port = port
this.dbConnection = null;
}
buildConnectionString() {
return 'mongodb://' + this.host + ':' + this.port;
}
connect() {
var connectionString = this.buildConnectionString();
console.log('[MongoDB] - Connecting to instance @ ' + connectionString);
var DBConnection = MongoClient.connect(connectionString, function(error, db) {
if (error) {
console.log('[MongoDB] - Error connecting to instance');
console.log(error);
}
else {
console.log('[MongoDB] - Connection Successful');
this.dbConnection = db;
}
});
}
}
然后像这样在不同的文件中创建它
var client = new DBClient('127.0.0.1', '1337');
client.connect();
连接数据库后,NodeJS 在到达this.dbConnection = db; 时崩溃,声明TypeError: Cannot set property 'dbConnection' of undefined。
我很确定这与在回调中使用有关,这会搞砸范围。我怎样才能解决这个问题?回调范围内的任何操作会不会被隔离,无法引用this?
另外,作为一个附带问题,像我在构造函数中那样初始化 null 属性是一种糟糕的代码做法吗?如果是这样,更合适的方法是什么?
【问题讨论】:
-
connect(connectionString, (error, db) => {...}
标签: javascript node.js mongodb scope