Anda dapat menggunakan variabel global untuk menahan koneksi (mis. db
), misalnya:
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))
})
})
Atau, jika mau, Anda juga dapat menggunakan objek Janji yang dikembalikan oleh MongoClient
jika dipanggil tanpa argumen panggilan balik:
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))
}))
})
Harap perhatikan bahwa saya menggunakan definisi fungsi panah gemuk ES6 dalam contoh kedua.
Anda benar sekali bahwa Anda tidak boleh memanggil MongoClient
setiap saat. Menggunakan variabel global atau Promises memungkinkan driver MongoDB node.js membuat kumpulan koneksi, yang mencapai setidaknya dua hal baik:
- Koneksi digunakan kembali dalam kumpulan, jadi tidak ada banyak proses penyiapan/penghancuran yang mahal selama masa pakai aplikasi Anda. Anda terhubung sekali, dan biarkan pengemudi mengurus sisanya untuk Anda.
- Anda dapat mengontrol jumlah koneksi yang dibuat aplikasi Anda ke dalam database, dengan membatasi ukuran kumpulan koneksi.
Edit 24-08-2018 :MongoClient.connect()
metode di driver node.js versi 3.0 dan yang lebih baru mengembalikan objek klien alih-alih objek database. Contoh di atas telah dimodifikasi agar tetap up to date dengan versi driver node.js terbaru.