MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Meilleure façon de se connecter à MongoDB en utilisant Node.js

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.