MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Beste Möglichkeit, sich mit Node.js mit MongoDB zu verbinden

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.