节点mysql.on('包',函数(包)错误

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

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

试试这个 – 这是更好的devise,它应该有望解决你的错误:

 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); 

好的…我一行一行地解构了项目…而导致它的代码是这样的 –

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

我正在使用这个片段,因为node_redis是抛出一个内存泄漏的错误或警告,由于最大的监听器限制每次有人会join,因为我用socket.io使用redisstore。 我删除了代码,我不再得到内存泄漏错误,也许是因为我采取了最新的node_redis版本。

所以很抱歉的麻烦和感谢您的帮助。