Du kan bruge en global variabel for at holde forbindelsen (f.eks. db
), for eksempel:
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))
})
})
Eller, hvis du foretrækker det, kan du også bruge Promise-objektet der returneres af MongoClient
hvis det kaldes uden et tilbagekaldsargument:
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))
}))
})
Bemærk venligst, at jeg brugte ES6 fedtpilfunktionsdefinitionen i det andet eksempel.
Du har fuldstændig ret i, at du ikke skal ringe til MongoClient
hver gang. Ved at bruge en global variabel eller løfter tillader MongoDB node.js-driveren at oprette en forbindelsespulje, som opnår mindst to gode ting:
- Forbindelser genbruges i en pulje, så der er ingen flere dyre opsætnings-/nedbrydningsprocesser i hele din applikations levetid. Du tilslutter én gang, og lader chaufføren tage sig af resten for dig.
- Du kan kontrollere mængden af forbindelse, din applikation laver til databasen, ved at begrænse størrelsen af forbindelsespuljen.
Rediger 2018-08-24 :MongoClient.connect()
metode i node.js driver version 3.0 og nyere returnerer et klientobjekt i stedet for et databaseobjekt. Eksemplerne ovenfor er blevet ændret for at holde den opdateret med den seneste node.js driverversion.