Можете да използвате глобална променлива за задържане на връзката (напр. db
), например:
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))
})
})
Или, ако предпочитате, можете също да използвате обещания обект който се връща от MongoClient
ако се извиква без аргумент за обратно извикване:
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))
}))
})
Моля, обърнете внимание, че използвах дефиницията на функцията за дебела стрелка ES6 във втория пример.
Абсолютно прав сте, че не трябва да се обаждате на MongoClient
всеки път. Използването на глобална променлива или Promises позволява на драйвера MongoDB node.js да създаде пул за връзки, което постига поне две добри неща:
- Връзките се използват повторно в пул, така че няма множество скъпи процеси за настройка/разваляне за целия живот на вашето приложение. Свързвате се веднъж и оставяте шофьорът да се погрижи за останалото вместо вас.
- Можете да контролирате количеството връзки, които вашето приложение прави към базата данни, като ограничите размера на пула от връзки.
Редактиране на 24.08.2018 :MongoClient.connect()
метод в драйвера node.js версия 3.0 и по-нова връща клиентски обект вместо обект на база данни. Примерите по-горе бяха променени, за да се поддържат актуални с най-новата версия на драйвера node.js.