Sie können eine globale Variable verwenden um die Verbindung zu halten (z.B. db
), zum Beispiel:
var db = null // global variable to hold the connection
MongoClient.connect('mongodb://localhost:27017/', function(err, client) {
if(err) { console.error(err) }
db = client.db('test') // once connected, assign the connection to the global variable
})
app.get('/', function(req, res) {
db.collection('test').find({}).toArray(function(err, docs) {
if(err) { console.error(err) }
res.send(JSON.stringify(docs))
})
})
Alternativ können Sie auch das Promise-Objekt verwenden die von MongoClient
zurückgegeben wird wenn es ohne Callback-Argument aufgerufen wird:
var conn = MongoClient.connect('mongodb://localhost:27017/') // returns a Promise
app.get('/', function(req, res) {
conn.then(client=> client.db('test').collection('test').find({}).toArray(function(err, docs) {
if(err) { console.error(err) }
res.send(JSON.stringify(docs))
}))
})
Bitte beachten Sie, dass ich im zweiten Beispiel die ES6-Fettpfeil-Funktionsdefinition verwendet habe.
Sie haben absolut Recht, dass Sie MongoClient
nicht aufrufen sollten jedes Mal. Die Verwendung einer globalen Variablen oder Promises ermöglicht es dem MongoDB-Treiber node.js, einen Verbindungspool zu erstellen, der mindestens zwei gute Dinge erreicht:
- Verbindungen werden in einem Pool wiederverwendet, sodass es während der Lebensdauer Ihrer Anwendung keinen mehrfachen teuren Setup-/Teardown-Prozess gibt. Sie verbinden sich einmal und lassen den Fahrer den Rest für Sie erledigen.
- Sie können die Anzahl der Verbindungen steuern, die Ihre Anwendung mit der Datenbank herstellt, indem Sie die Größe des Verbindungspools begrenzen.
Bearbeitet am 24.08.2018 :Der MongoClient.connect()
-Methode in node.js-Treiberversion 3.0 und höher gibt ein Clientobjekt anstelle eines Datenbankobjekts zurück. Die obigen Beispiele wurden geändert, um sie mit der neuesten node.js-Treiberversion auf dem neuesten Stand zu halten.