MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Il modo migliore per connettersi a MongoDB usando Node.js

Puoi utilizzare una variabile globale per mantenere la connessione (es. db ), ad esempio:

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))
    })
})

Oppure, se preferisci, puoi anche utilizzare l'oggetto Promessa che viene restituito da MongoClient se viene chiamato senza un argomento di callback:

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))
    }))
})

Si noti che nel secondo esempio ho utilizzato la definizione della funzione freccia grassa ES6.

Hai assolutamente ragione sul fatto che non dovresti chiamare MongoClient ogni volta. L'utilizzo di una variabile globale o di Promise consente al driver MongoDB node.js di creare un pool di connessioni, ottenendo almeno due risultati positivi:

  • Le connessioni vengono riutilizzate in un pool, quindi non ci sono più costosi processi di installazione/smontaggio per tutta la durata della tua applicazione. Ti connetti una volta e lascia che l'autista si occupi del resto per te.
  • Puoi controllare la quantità di connessione che la tua applicazione effettua al database, limitando la dimensione del pool di connessioni.

Modifica 24-08-2018 :Il MongoClient.connect() metodo nel driver node.js versione 3.0 e successive restituisce un oggetto client anziché un oggetto database. Gli esempi sopra sono stati modificati per mantenerlo aggiornato con l'ultima versione del driver node.js.