gpt4 book ai didi

javascript - 在没有 EventEmitter 的情况下检测到可能的 EventEmitter 内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-04 00:30:04 24 4
gpt4 key购买 nike

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

我有这个方法:

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) Warning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit

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

最佳答案

您不应该在每次要发出查询时都在连接上添加错误处理程序。连接是池化的,您不会每次都获得新的连接。在您的例子中,它是一个大小为 10 的池,并且您在第十一次调用时重用连接,此时会触发警告。

检查一下错误

  • 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);

});
});
}

关于javascript - 在没有 EventEmitter 的情况下检测到可能的 EventEmitter 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41282278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com