2016-12-22 81 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