2016-07-18 12 views
2

Ich habe eine Nodejs App, die einige mongodb Datenbankmigration macht.MongoDB-Verbindung schließt nicht immer nach connection.close()

von Alles beginnt mit

MongoClient.connect(`mongodb://${databaseHostname}:${databasePort}/${options.databaseName}`, 
(connectionError, dbConnection) => { 
    if (connectionError) { 
    return cb(connectionError); 
    } 

    console.log('Opened connection to', databaseHostname, options.databaseName); 
    return cb(null, dbConnection); 
}); 

und endet mit

console.log('Close'); 
dbConnection.close((err) => { 
    if (err) console.log(err); 

    console.log('Closed'); 
}); 

Dazwischen gibt es eine ganze Menge passiert, neue Kollektionen erstellt, Dokumente neu angeordnet etc. Aber nie eine neue Verbindung geöffnet. Die Ausgabe der App ist:

Opened connection to localhost testDatabase 

[Viele andere Protokolle hier]

Close 
Closed 

Die Datenbankprotokolle sind

2016-07-18T16:54:29.400+0200 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54336 #848 (1 connection now open) 
2016-07-18T16:54:29.423+0200 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54337 #849 (2 connections now open) 
2016-07-18T16:54:29.426+0200 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54338 #850 (3 connections now open) 

[Viel Einfügungen und Updates hier]

2016-07-18T16:58:06.493+0200 I NETWORK [conn849] end connection 127.0.0.1:54337 (2 connections now open) 
2016-07-18T16:58:06.494+0200 I NETWORK [conn850] end connection 127.0.0.1:54338 (1 connection now open) 

Wie Sie sehen können, ein Mongodb Die Verbindung bleibt geöffnet, obwohl dbConnection.close() aufgerufen wurde, um zu verhindern, dass die nodejs-Anwendung beendet wird. Ich schaue mir das schon eine ganze Weile an, aber verstehe nicht, was dieses Verhalten verursachen könnte?

Antwort

0

Wenn Sie die Verbindung schließen möchten, haben Sie versucht, in Erwägung zu ziehen mit .finally() oder .then() -Anweisung, nachdem es gelungen ist, eine Verbindung herzustellen?

so etwas wie

MongoClient.connect(`mongodb://${databaseHostname}:${databasePort}/${options.databaseName}`, 
(connectionError, dbConnection) => { 
    if (connectionError) { 
    return cb(connectionError); 
    } 

    console.log('Opened connection to', databaseHostname, options.databaseName); 
    return cb(null, dbConnection); 
}).then(() => { 
dbConnection.close((err) => { 
    if (err) console.log(err); 
    console.log('Closed'); 
    }); 
}); 

Auf jeden Fall habe ich vor kurzem einige der Forschung auf mongodb Verbindung, etwas sagten, dass sie es nicht Ihre Datenbank zu schließen empfohlen. Why is it recommended not to close a MongoDB connection anywhere in Node.js code?

und dieser Link könnte weiter für Ihr Problem helfen.

http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html

+0

Hey, ich glaube, Sie das Problem nicht verstehen. Ich möchte meine Verbindung nicht sofort schließen, da ich alle Datenbankmigrationen dazwischen mache. Und Sie sollten die Datenbankverbindung schließen, wenn Sie möchten, dass Ihr Programm ordnungsgemäß beendet wird, da es ansonsten einfach geöffnet bleibt. Sie beziehen sich darauf, dass Sie die Verbindung nicht schließen sollten, wenn Sie sie erneut verwenden möchten, z. zwischen Abfragen. – Philiiiiiipp

+0

Oh ich sehe, vielleicht sollten Sie versuchen https://github.com/mongodb/node-mongodb-native. Verwenden Sie den Befehl db.close. Ich habe es von der Antwort hier gefunden http://Stackoverflow.com/a/12368764/3465227 –