我需要每隔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()不在另一个函数中时,它正确运行。
我做错了什么? 或者更确切地说,我将如何执行此循环查询? 感谢
答案 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版本。
很抱歉找到麻烦并感谢您的帮助。