无法读取undefined的属性'connect'

时间:2015-05-04 21:16:42

标签: node.js

我正在编写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中为空?

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为您将函数传递给async.series,从而导致它丢失了上下文。 this执行时不会是实例。要解决此问题,请使用.bind确保上下文保持不变。

async.series([tuxDB.connect.bind(tuxDB),

另一种选择是传递一个匿名函数。

async.series([function (next) {
  tuxDB.connect(next);
},