2012-09-11 13 views
8

Ich versuche node.js mit mongodb zu verwenden und nach dem Tutorial http://howtonode.org/express-mongodbnode.js MongoDB Schließen der Verbindung

Der Code für die Verbindung zu öffnen ist

ArticleProvider = function(host, port) { 
this.db= new Db('node-mongo-blog', new Server(host, port, {auto_reconnect: true}, {})); 
this.db.open(function(){}); 
}; 

Allerdings kann ich keine Verbindungen sehen geschlossen sein. Aber wenn ich die Protokolle auf der Mongo-Konsole sehe, kann ich sehen, dass es sich um Verbindungen handelt, die sich öffnen und nach einiger Zeit schließen.

Schließt die Verbindung automatisch? Wird es ein Problem sein, wenn eine große Anzahl von Clients versucht, auf den Server zuzugreifen? Wo sollte die Verbindung geschlossen werden?

Dank

Tuco

Antwort

6

In dieser Beispielanwendung wird nur ein einzelnes Objekt ArticleProvider erstellt, das die Anwendung beim Bedienen von Anforderungen freigeben soll. Der Konstruktor dieses Objekts öffnet eine Datenbankverbindung, die erst geschlossen wird, wenn die Anwendung beendet ist (was gut ist).

Also, was Sie sehen sollten, ist, dass Sie jedes Mal eine neue Mongo-Verbindung erhalten, wenn Sie Ihre App starten, aber keine zusätzlichen Verbindungen, egal wie viele Clients auf den Server zugreifen. Und kurz nachdem du deine App beendet hast, solltest du sehen, dass ihre Verbindung auf der Mongo-Seite verschwindet.

2

node-mongodb-native bietet eine enge Methode für Db-Objekte und Sie können Ihre Verbindung schließen, wenn Sie durch den Aufruf es fertig sind.

Wenn Sie Ihre Verbindung nicht schließen, hält die Ereignisschleife die Verbindung offen und Ihr Prozess wird nicht beendet. Wenn Sie einen Webserver erstellen, bei dem Ihr Prozess nicht beendet wird, müssen Sie die Verbindung nicht schließen. Eine bessere Referenz für node-mongodb-native finden Sie unter https://github.com/mongodb/node-mongodb-native.

0

Denken Sie daran, db.close in den letzten Callback zu setzen, der ausgeführt wird, so dass die Verbindung offen ist, bis alle Rückrufe beendet sind. Sonst gibt es einen Fehler wie

/usr/local/lib/node_modules/mongodb/lib/utils.js:97 
    process.nextTick(function() { throw err; }); 
             ^
Error 
    at Error.MongoError (/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:13:17) 
    at Server.destroy (/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:629:47) 
    at Server.close (/usr/local/lib/node_modules/mongodb/lib/server.js:344:17) 
    at Db.close (/usr/local/lib/node_modules/mongodb/lib/db.js:267:19)