我需要每隔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()不在另一个函数中时,它可以正确运行。
我做错了什么?或者更确切地说,我该如何执行这个循环查询?谢谢
发布于 2012-12-12 17:31:30
好的..。我逐行解构了这个项目...造成这种情况的代码是这样的-
var EventEmitter = require('events').EventEmitter
, on = EventEmitter.prototype.on;
EventEmitter.prototype.on = function () {
this._maxListeners = Infinity;
on.apply(this, arguments);
};我之所以使用这个片段,是因为当我在socket.io中使用redisstore时,每次有人加入时,node_redis都会抛出一个错误或内存泄漏警告,这是由于最大侦听器限制。我删除了代码,并且不再收到内存泄漏错误,可能是因为我使用了最新的node_redis版本。
很抱歉给您添了麻烦,谢谢您的帮助。
发布于 2012-12-11 23:46:48
试试这个--这是更好的设计,它有望解决你的错误:
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);https://stackoverflow.com/questions/13821034
复制相似问题