MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Melhor maneira de se conectar ao MongoDB usando Node.js


Você pode usar uma variável global para manter a conexão (por exemplo, db ), por exemplo:
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, se preferir, você também pode usar o objeto Promessa que é retornado por MongoClient se for chamado sem um argumento de retorno de chamada:
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))
    }))
})

Observe que usei a definição da função de seta gorda ES6 no segundo exemplo.

Você está absolutamente correto que você não deve chamar MongoClient toda vez. O uso de uma variável global ou Promises permite que o driver node.js do MongoDB crie um pool de conexões, que alcança pelo menos duas coisas boas:
  • As conexões são reutilizadas em um pool, portanto, não há vários processos caros de configuração/desmontagem durante a vida útil do seu aplicativo. Você se conecta uma vez e deixa o motorista cuidar do resto para você.
  • Você pode controlar a quantidade de conexão que seu aplicativo faz no banco de dados, limitando o tamanho do pool de conexões.

Editar 24-08-2018 :O MongoClient.connect() O método no driver node.js versão 3.0 e mais recente retorna um objeto de cliente em vez de um objeto de banco de dados. Os exemplos acima foram modificados para mantê-lo atualizado com a versão mais recente do driver node.js.