Vous pouvez utiliser une variable globale pour maintenir la connexion (par exemple db
), par exemple :
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))
})
})
Ou, si vous préférez, vous pouvez également utiliser l'objet Promesse qui est renvoyé par MongoClient
s'il est appelé sans argument de rappel :
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))
}))
})
Veuillez noter que j'ai utilisé la définition de la fonction de flèche épaisse ES6 dans le deuxième exemple.
Vous avez absolument raison de ne pas appeler MongoClient
à chaque fois. L'utilisation d'une variable globale ou de Promises permet au pilote MongoDB node.js de créer un pool de connexions, ce qui permet d'obtenir au moins deux bonnes choses :
- Les connexions sont réutilisées dans un pool, il n'y a donc pas de processus de configuration/démontage coûteux pendant toute la durée de vie de votre application. Vous vous connectez une seule fois et laissez le chauffeur s'occuper du reste pour vous.
- Vous pouvez contrôler le nombre de connexions que votre application établit avec la base de données en limitant la taille du pool de connexions.
Modifier 2018-08-24 :Le MongoClient.connect()
La méthode dans le pilote node.js version 3.0 et plus récente renvoie un objet client au lieu d'un objet de base de données. Les exemples ci-dessus ont été modifiés pour le maintenir à jour avec la dernière version du pilote node.js.