首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node mysql .on('packet',function(packet)错误

node mysql .on('packet',function(packet)错误
EN

Stack Overflow用户
提问于 2012-12-11 21:03:45
回答 2查看 222关注 0票数 2

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

代码语言:javascript
复制
  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);

我得到以下错误。

代码语言:javascript
复制
\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()不在另一个函数中时,它可以正确运行。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-12 17:31:30

好的..。我逐行解构了这个项目...造成这种情况的代码是这样的-

代码语言:javascript
复制
 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版本。

很抱歉给您添了麻烦,谢谢您的帮助。

票数 0
EN

Stack Overflow用户

发布于 2012-12-11 23:46:48

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

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13821034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档