node mysql .on('packet',function(packet)error

时间:2012-12-11 13:03:45

标签: mysql node.js

我需要每隔X个时间进行一次查询。 我正在运行节点版本0.8.12和最新的节点mysql 运行以下代码时

  function testmysql()
{
    mysqlCon.connect();
    mysqlCon.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
    if (err) throw err;

    console.log('The solution is: ', rows[0].solution);
});

mysqlCon.end();
}

    var period = 2000;
    var interval  = setInterval(function(){

    testmysql();
}, period);

我收到以下错误。

\nodetest\node_modules\mysql\lib\protocol\Protocol.js:95
    .on('packet', function(packet) {
     ^
TypeError: Cannot call method 'on' of undefined
    at Protocol._enqueue (\nodetest\node_modules\mysql\lib\protocol\Protocol.j
s:95:6)
    at Protocol.handshake (\nodetest\node_modules\mysql\lib\protocol\Protocol.
js:37:41)
    at Connection.connect (\nodetest\node_modules\mysql\lib\Connection.js:37:1
8)
    at testmysql (\nodetest\index.js:1112:10)
    at Timer.<anonymous> (\nodetest\index.js:1143:1)
    at Timer.exports.setInterval.timer.ontimeout (timers.js:234:14)

虽然当testmysql()不在另一个函数中时,它正确运行。

我做错了什么? 或者更确切地说,我将如何执行此循环查询? 感谢

2 个答案:

答案 0 :(得分:0)

试试这个 - 它是更好的设计,它应该有希望解决你的错误:

function testmysql(mysqlConnection)
{
    mysqlConnection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
        if (err) throw err;

        console.log('The solution is: ', rows[0].solution);
    });
}

var period = 2000;
var interval  = setInterval(function(){
    var mysqlCon = mysql.createConnection({host:'localhost',user:'testadmin',password:'pass',database:'mydb'});        
    mysqlCon.connect();
    testmysql(mysqlCon);
    mysqlCon.end();
}, period);

答案 1 :(得分:0)

好的......我逐行解构了项目......导致它的代码就是这个 -

 var EventEmitter = require('events').EventEmitter
 , on = EventEmitter.prototype.on;
 EventEmitter.prototype.on = function () {
this._maxListeners = Infinity;
on.apply(this, arguments);
};

我正在使用此代码段,因为每次有人加入时,node_redis都会因为最大侦听器限制而引发内存泄漏错误或警告,因为我正在使用带有socket.io的redisstore。我删除了代码,我不再得到内存泄漏错误,因为我采用了最新的node_redis版本。

很抱歉找到麻烦并感谢您的帮助。