我正在编写nodejs应用程序。
我正在尝试使用异步插件来连接,查询和断开与db的连接。
我创建的'class'如下:
var config = ini.parse(fs.readFileSync('config/config.ini', 'utf-8'));
var mysql = require('mysql');
var inspect = require('util').inspect;
module.exports = TuxDb;
function TuxDb() {
this._connection = mysql.createConnection({
host: config.db.host,
user: config.db.username,
password: config.db.password,
database: config.db.schema
});
}
TuxDb.prototype.connect = function (callback) {
this._connection.connect(function (err) {
callback(err, null);
});
}
和代码:
var TuxDb = require('../../db/db.js');
var tuxDB = new TuxDb();
async.series([tuxDB.connect,
function (callback) {
tuxDB.getGenericDrinks(callback);
}, function (callback) {
tuxDB.disconnect(null, callback);
}
], function (err, result) {
if (err != null) {
return next(new restify.InvalidArgumentErrror(err));
}
});
我收到以下错误:
TypeError: Cannot read property 'connect' of undefined
我不太明白为什么。构造函数已设置this._connection
,那么为什么在连接函数this._connection
中为空?
答案 0 :(得分:1)
这种情况正在发生,因为您将函数传递给async.series
,从而导致它丢失了上下文。 this
执行时不会是实例。要解决此问题,请使用.bind
确保上下文保持不变。
async.series([tuxDB.connect.bind(tuxDB),
另一种选择是传递一个匿名函数。
async.series([function (next) {
tuxDB.connect(next);
},