2016-06-08 6 views
0

Ich verwende Pg Node-Modul für die Verbindung der Datenbank. Ich habe mehrere Verbindungen für jede DML-Operation erstellt. Wenn die kontinuierliche Abfrage Ausführung Ich habe eine Warnmeldung als "(Knoten) Warnung: mögliche EventEmitter Speicherleck erkannt. 11 Fehler Listener hinzugefügt. Verwenden Sie emitter.setMaxListeners(), um Limit zu erhöhen." Die gegebene pg Ausfälle Poolsize ist 5.(Knoten) Warnung: Möglich EventEmitter Speicherleck erkannt. 11 Fehlerlistener hinzugefügt. Verwenden Sie emitter.setMaxListeners(), um den Grenzwert zu erhöhen

var pg = require('pg') 
pg.defaults.poolSize = 5; 
var dbHelper = { 
initializeConnection: function (callback) { 
    pg.connect(conString, function (err, client, done) { 
     if (err) { 
      done(client); 
      return callback(err, null); 
     } 
     callback(null, client, done); 
    }); 

    pg.on('error', function (err) { 
    }); 
    pg.end(); 
}, 
    query: function (pgQuery, args, callback, options) { 
    this.initializeConnection(function (err, client, done) { 
      client.query(pgQuery, args, function (err, response) { 
      done(); 
      return callback(err, response); 
     }); 
    }); 
}, 
}; 

module.exports = dbHelper; 

Beispielabfrage

dbHelper.query("SELECT name,age,address FROM EMPLOYEE WHERE id=$1", [1001], function (err, response) { 
     callback(err, response); 
    }); 

wie der Ereignisspeicher Emitters Porree zu verhindern.

Antwort

0

Der Grund dafür ist, dass Sie nicht die Verbindung entbinden richtig:

pg.connect(conString, function (err, client, done) { 
     if (err) { 
      done(client); 
      return callback(err, null); 
     } 
     callback(null, client, done); 
    }); 

dies sein sollte:

pg.connect(conString, function (err, client, done) { 
    if (err) { 
     callback(err, null); 
    } else { 
     callback(null, client); 
     done(); 
    } 
}); 

heißt Sie done() aufrufen, wenn kein Fehler aufgetreten ist.

Und wenn Sie diese Art von Fehlern insgesamt vermeiden möchten - überprüfen Sie pg-promise;)