Selama ini kita berbicara ke MongoDB lewat mongosh — cukup untuk belajar, tetapi aplikasi nyata tidak bisa mengetik perintah satu per satu. Aplikasi JavaScript memerlukan pustaka yang menerjemahkan panggilan fungsi menjadi protokol khusus MongoDB, menerima balasan server, dan mengubah BSON menjadi object JavaScript. Pustaka itu adalah driver resmi bernama mongodb — paket npm yang dikelola langsung oleh tim MongoDB. Chapter ini menyiapkan proyek Node.js dari nol, memasang driver, lalu memastikan instalasinya benar dengan ping pertama.
Peta materi Chapter ini:
- Membuat proyek npm dan memasang paket
mongodb. - Memahami perbedaan CommonJS (CJS) dan ECMAScript Modules (ESM).
- Menyesuaikan versi Node.js dengan versi driver.
- Menguji instalasi dengan file
cek-driver.js.
Memasang Paket Driver #
Driver adalah dependency biasa dari npm, jadi pemasangannya mengikuti alur standar proyek Node.js: buat proyek baru, lalu instal paketnya. Kita pakai nama proyek toko-buku karena domain contoh sepanjang Section ini adalah toko buku:
mkdir toko-buku && cd toko-buku
npm init -yOutput yang Dihasilkan:
Wrote to /tmp/toko-buku/package.json:
{
"name": "toko-buku",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"type": "commonjs"
}Baris "type": "commonjs" menegaskan bahwa berkas .js di proyek ini dievaluasi sebagai CommonJS — titik penting yang kita bahas setelah ini. Lanjut ke pemasangan driver:
npm install mongodbOutput yang Dihasilkan:
added 12 packages in 631msDriver terpasang bersama dependensinya (antara lain bson untuk konversi data). Setelah selesai, package.json memiliki satu entri baru di bagian dependencies, dan seluruh kodenya berada di folder node_modules:
"dependencies": {
"mongodb": "^7.7.0"
}Tanda sisip ^ pada ^7.7.0 berarti npm install berikutnya boleh mengambil versi 7.x yang lebih baru, tetapi tidak melompat ke 8.x. Versi yang benar-benar terpasang bisa diverifikasi tanpa membuka file apa pun:
node -e "console.log(require('mongodb/package.json').version)"Output yang Dihasilkan:
7.7.0CommonJS atau ECMAScript Modules #
Node.js mengenal dua sistem modul. CommonJS (CJS) memuat modul secara sinkron dengan require() dan mengekspor lewat module.exports; ECMAScript Modules (ESM) memakai import/export dan berjalan di lingkungan yang mendukung Promise secara penuh. Pembeda praktisnya:
| Aspek | CommonJS | ESM |
|---|---|---|
| Ekstensi / penanda | .js tanpa "type" (atau "type": "commonjs") | "type": "module", atau .mjs |
| Memuat driver | const { MongoClient } = require("mongodb") | import { MongoClient } from "mongodb" |
Top-level await | tidak tersedia | tersedia |
| Mengakses env | process.env.MONGODB_URI | process.env.MONGODB_URI |
Driver 7.x mendukung keduanya, jadi pilihan adalah soal selera tim dan ekosistem. Satu konsekuensi perlu dicatat: karena CJS tidak punya top-level await, kode yang menunggu jaringan harus dibungkus function async — pola main() yang dipanggil dengan .catch():
// mdtest: skip — ilustrasi dua sistem modul, bukan file yang dijalankan
// CommonJS (dipakai konsisten di Section ini)
const { MongoClient } = require("mongodb")
async function main() {
const client = new MongoClient(process.env.MONGODB_URI)
await client.connect()
await client.close()
}
main().catch(err => process.exit(1))
// ECMAScript Modules — berkas .mjs atau "type": "module"
// import { MongoClient } from "mongodb" // top-level await boleh:
// const client = new MongoClient(process.env.MONGODB_URI)
// await client.connect()
// await client.close()
Seluruh Section ini memakai satu gaya saja: CommonJS dengan wrapper main(). Alasannya praktis — CJS tetap bawaan npm init, bekerja tanpa konfigurasi tambahan, dan pola main().catch() memberi satu titik tangkap galat yang jelas.
Versi Node.js yang Didukung #
Setiap versi besar driver menaikkan syarat minimum Node.js — informasinya tercantum di field engines pada package.json milik driver. Tabel berikut hasil membaca field itu dari registry npm:
Driver mongodb | Node.js minimum | Status |
|---|---|---|
| 5.x | 14.20.1 | tidak dikembangkan lagi |
| 6.x | 16.20.1 | perbaikan penting saja |
| 7.x | 20.19.0 | baris saat ini |
Versi Node yang kita pakai jauh di atas syarat itu:
node --versionOutput yang Dihasilkan:
v24.21.0Uji Instalasi dengan Ping #
Pemasangan yang sukses belum berarti koneksi bekerja — kita butuh satu file yang benar-benar menyentuh server. File berikut mencetak versi driver dan Node.js, membuka koneksi, menjalankan command ping, lalu menutup koneksi:
// cek-driver.js — uji instalasi: tampilkan versi driver lalu ping server
// Jalankan: MONGODB_URI="mongodb://127.0.0.1:27017/?directConnection=true" node cek-driver.js
const { MongoClient } = require("mongodb")
const versiDriver = require("mongodb/package.json").version
const uri = process.env.MONGODB_URI ?? "mongodb://127.0.0.1:27017/?directConnection=true"
const client = new MongoClient(uri, { serverSelectionTimeoutMS: 5000 })
async function main() {
console.log("Versi driver mongodb :", versiDriver)
console.log("Versi Node.js :", process.version)
await client.connect()
const ping = await client.db("admin").command({ ping: 1 })
console.log("Ping ke server : ok =", ping.ok)
await client.close()
console.log("Instalasi siap dipakai.")
}
main().catch(err => {
console.error("GAGAL:", err.name, "-", err.message)
process.exit(1)
})MONGODB_URI="mongodb://127.0.0.1:27017/?directConnection=true" node cek-driver.jsOutput yang Dihasilkan:
Versi driver mongodb : 7.7.0
Versi Node.js : v24.21.0
Ping ke server : ok = 1
Instalasi siap dipakai.Mari kita bedah baris-baris kuncinya: require("mongodb/package.json") membaca metadata paket langsung dari node_modules — cara termurah membuktikan versi tanpa alat tambahan. Baris process.env.MONGODB_URI ?? "..." membaca connection string dari environment variable dan hanya jatuh ke alamat lokal bila variabel itu tidak di-set; pola ini dipakai di seluruh Section agar kode tidak menempel pada satu server. client.db("admin").command({ ping: 1 }) mengirim command administratif paling ringan — server membalas { ok: 1 } tanpa menyentuh data apa pun. Terakhir, client.close() menutup koneksi sebelum proses keluar.
Jika baris GAGAL: MongoServerSelectionError ... yang muncul, artinya driver terpasang dengan benar tetapi server tidak dapat dijangkau — periksa apakah mongod berjalan dan URI sudah tepat. Koneksi inilah topik penuh Chapter berikutnya.
Rangkuman #
- Driver resmi terpasang lewat
npm install mongodb; versi terpasang diverifikasi dengannode -e "console.log(require('mongodb/package.json').version)". npm init -ymenghasilkan proyek CommonJS; Section ini konsisten memakai CJS + wrappermain()async karena tanpa top-levelawait.- Driver 7.x mensyaratkan Node.js 20.19 ke atas; Node 14/16/18 sudah end-of-life.
cek-driver.jsmembuktikan rantai lengkap: paket termuat, koneksi terbuka,pingberbalasok = 1, koneksi tertutup.