2016-12-22 29 views
1

我已经试了很长时间来解决这个问题,但我自己却找不到适合我的问题的解决方案。可能EventEmitter内存泄漏检测到没有EventEmiter

我有这样的方法:

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次连续得到以下警告:

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

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

+0

你在使用连接数据库和管理游泳池? –

+0

'VAR池= mysql.createPool({ connectionLimit:10, 主机: '本地主机', 用户: '根', 密码: 'PW', 数据库: 'DB', 调试:假, } );' – R4LPH

+0

是什么插件?有几十个库来访问节点中的数据库。你使用mysqljs/mysql吗? –

回答

1

每次您想发出查询时,都不应该在连接上添加错误处理程序。连接被集中,你不会每次都得到一个新的连接。在你的情况下,它是一个大小为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); 

     }); 
    }); 
} 
+0

非常感谢。这工作! – R4LPH