2

我需要每隔 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() 不在另一个函数中时,它运行正确。

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

4

2 回答 2

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 版本。

很抱歉给您带来麻烦,并感谢您的帮助。

于 2012-12-12T09:31:30.160 回答
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);
于 2012-12-11T15:46:47.673 回答