没有EventEmiter检测到可能的EventEmitter内存泄漏

我已经尝试了很长时间来自己解决这个问题,但是找不到适合我的问题的解决办法。

我有这个方法:

handle_database = function(callback, req, res) { pool.getConnection(function(err,connection){ if (err) { res.json({"code" : 100, "status" : "Error in connection database"}); return; } connection.query("select * from `atable`",function(err,rows){ connection.release(); if(!err) { callback(rows); } }); connection.on('error', function(err) { res.json({"code" : 100, "status" : "Error in connection database"}); return; }); }); } 

这个方法在我的routes.js中以这种方式使用:

 router.get('/', function(req, res){ db.getUsers(function (data) { res.render('pages/index',{users: data, title: 'title'}); }, req, res); }); 

当我连续刷新这个页面11次时,我得到以下警告:

(节点:11780)警告:检测到可能的EventEmitter内存泄漏。 添加了11个错误侦听器。 使用emitter.setMaxListeners()来增加限制

但是我找不到如何解决这个问题,或者只是把限制设置为0,这是一个聪明的想法?

每次要发出查询时,都不应在连接上添加error handling程序。 连接是汇集的,你不会每次都得到一个新的。 在你的情况下,它是一个大小为10的池,并在第11次调用时重用了一个连接,这是触发警告的时候。

只要检查错误

  • pool.getConnection
  • connection.query

以下是它的外观:

 handle_database = function(callback, req, res) { pool.getConnection(function(err,connection){ if (err) { res.json({"code" : 100, "status" : "Error in connection database"}); return; } connection.query("select * from `atable`",function(err,rows){ connection.release(); if(err) { res.json({"code" : whatever, "status" : "Error in querying database"}); return; } callback(rows); }); }); }