🍭 NodeJS #22: Koneksi ke Database (Opsional) – Pengenalan MongoDB atau MySQL
Halo, calon full-stack developer! 👋
Sejauh ini kita menyimpan data di file JSON. Itu cukup untuk proyek kecil atau belajar. Tapi untuk aplikasi sungguhan, kita butuh database yang lebih kuat dan cepat. Di tutorial ini, kita akan berkenalan dengan dua database populer: MySQL (database relasional) dan MongoDB (database NoSQL). Kamu bisa pilih salah satu yang paling menarik. Kita akan belajar langkah awal menghubungkan Express ke database tersebut. Yuk, kita mulai! 🚀
🧐 Database Itu Apa?
Database adalah tempat menyimpan data secara terstruktur. Bayangkan database seperti lemari arsip raksasa yang bisa menyimpan jutaan data, dan kita bisa mengambil data dengan cepat. Bedanya dengan file JSON biasa: database bisa menangani banyak pengguna sekaligus, lebih aman, dan punya banyak fitur canggih.
Ada dua jenis database populer:
- MySQL – database relasional. Data disimpan dalam tabel seperti Excel, dengan baris dan kolom. Cocok untuk data yang terstruktur rapi (contoh: daftar pengguna, produk, transaksi).
- MongoDB – database NoSQL (dokumen). Data disimpan dalam format JSON (mirip objek JavaScript). Cocok untuk data yang fleksibel dan tidak selalu sama strukturnya.
Kita akan coba keduanya. Kamu bisa pilih yang paling kamu sukai! 😊
📦 Persiapan Awal
Buat folder proyek baru, misal belajar-database. Inisialisasi npm dan instal express:
npm init -y
npm install express
Buat file app.js sebagai tempat menulis kode.
🔷 Opsi 1: Koneksi ke MySQL
MySQL adalah database yang menggunakan tabel. Untuk terhubung dari Node.js, kita perlu driver mysql2 [citation:1][citation:3].
Langkah 1: Instal Driver MySQL
npm install mysql2
Langkah 2: Buat Koneksi
Buka app.js dan tulis kode berikut [citation:3][citation:9]:
const express = require('express');
const mysql = require('mysql2');
const app = express();
const port = 3000;
// Buat koneksi ke MySQL
const connection = mysql.createConnection({
host: 'localhost', // host database (biasanya localhost)
user: 'root', // username MySQL (default: root)
password: '', // password MySQL (kosong jika default)
database: 'testdb' // nama database yang akan digunakan
});
// Coba koneksi
connection.connect((err) => {
if (err) {
console.error('❌ Gagal konek ke MySQL:', err.stack);
return;
}
console.log('✅ Terhubung ke MySQL sebagai id ' + connection.threadId);
});
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`Server berjalan di http://localhost:${port}`);
});
Penjelasan:
mysql.createConnection()membuat koneksi ke database [citation:1].- Ganti
host,user,password,databasesesuai dengan pengaturan MySQL kamu. - Jika belum punya database, buat dulu di MySQL:
CREATE DATABASE testdb;.
Jalankan dengan node app.js. Jika berhasil, muncul pesan "Terhubung ke MySQL".
Langkah 3: Menggunakan Connection Pool (Lebih Baik)
Untuk aplikasi nyata, sebaiknya gunakan connection pool agar tidak membuat koneksi baru setiap saat [citation:3][citation:6].
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: '',
database: 'testdb',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
// Ubah promise agar bisa pakai async/await
const promisePool = pool.promise();
// Contoh route dengan query
app.get('/users', async (req, res) => {
try {
const [rows] = await promisePool.query('SELECT * FROM users');
res.json(rows);
} catch (err) {
console.error(err);
res.status(500).send('Database error');
}
});
Dengan pool, koneksi dikelola secara efisien dan kita bisa pakai async/await.
users di MySQL sebelum mencoba route di atas. Contoh:
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), email VARCHAR(100));
🍃 Opsi 2: Koneksi ke MongoDB
MongoDB adalah database NoSQL yang menyimpan data dalam bentuk dokumen JSON. Cara termudah terhubung adalah dengan Mongoose (ODM - Object Data Modeling) [citation:4][citation:10].
Langkah 1: Instal Mongoose
npm install mongoose
Langkah 2: Koneksi ke MongoDB
Di app.js, tulis kode berikut [citation:10]:
const express = require('express');
const mongoose = require('mongoose');
const app = express();
const port = 3000;
// Koneksi ke MongoDB
mongoose.connect('mongodb://localhost:27017/testdb')
.then(() => console.log('✅ Terhubung ke MongoDB'))
.catch(err => console.error('❌ Gagal konek ke MongoDB:', err));
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`Server berjalan di http://localhost:${port}`);
});
Penjelasan:
mongodb://localhost:27017/testdbadalah URL koneksi ke MongoDB di komputer lokal.testdbadalah nama database (akan dibuat otomatis jika belum ada)..then()dan.catch()menangani hasil koneksi.
Jalankan dengan node app.js. Pastikan MongoDB sudah berjalan di komputer kamu. Jika belum, install MongoDB dan jalankan mongod di terminal.
Langkah 3: Membuat Schema dan Model
MongoDB fleksibel, tapi dengan Mongoose kita bisa mendefinisikan struktur data (schema) [citation:10].
// Definisikan schema
const userSchema = new mongoose.Schema({
name: String,
email: String,
age: Number,
createdAt: { type: Date, default: Date.now }
});
// Buat model
const User = mongoose.model('User', userSchema);
// Contoh route untuk menambah user
app.post('/users', async (req, res) => {
try {
const user = new User(req.body);
await user.save();
res.status(201).json(user);
} catch (err) {
res.status(400).json({ error: err.message });
}
});
// Contoh route untuk mengambil semua user
app.get('/users', async (req, res) => {
try {
const users = await User.find();
res.json(users);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
Jangan lupa tambahkan middleware express.json() agar bisa membaca JSON dari body request.
📊 Perbandingan Singkat MySQL vs MongoDB
| Aspek | MySQL | MongoDB |
|---|---|---|
| Jenis Database | Relasional (tabel) | NoSQL (dokumen JSON) |
| Struktur Data | Kaku, harus tentukan kolom dulu | Fleksibel, setiap dokumen bisa berbeda |
| Bahasa Query | SQL (Structured Query Language) | Metode JavaScript (find, insert, dll) |
| Cocok untuk | Aplikasi dengan data terstruktur rapi (keuangan, transaksi) | Aplikasi dengan data beragam, cepat berkembang |
| Driver/ODM | mysql2 [citation:1] |
mongoose [citation:4][citation:10] |
Pilih yang paling cocok dengan kebutuhan proyekmu. Untuk pemula, MongoDB sering lebih mudah karena menggunakan format JSON yang sudah kita kenal.
🔐 Tips Keamanan: Simpan Kredensial di .env
Jangan pernah menulis password database langsung di kode! Gunakan file .env [citation:4][citation:6].
Instal dotenv: npm install dotenv
Buat file .env:
DB_HOST=localhost
DB_USER=root
DB_PASS=rahasia
DB_NAME=testdb
Di app.js:
require('dotenv').config();
const pool = mysql.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
// ...
});
.env ke .gitignore agar tidak terupload ke GitHub!
🧪 Latihan Mandiri
- Pilih salah satu database (MySQL atau MongoDB) dan instal di komputer kamu.
- Buat database baru dengan nama
latihan. - Buat tabel/collection untuk menyimpan data "buku" (judul, penulis, tahun).
- Buat route GET
/bukuyang mengambil data dari database dan menampilkannya dalam format JSON. - Buat route POST
/bukuuntuk menambah buku baru (gunakan Postman untuk menguji).
📚 Rangkuman
- MySQL menggunakan driver
mysql2dan query SQL [citation:1][citation:3]. - MongoDB menggunakan
mongoosedengan schema dan model [citation:4][citation:10]. - Gunakan connection pool untuk MySQL agar lebih efisien [citation:6].
- Simpan kredensial database di .env untuk keamanan [citation:4].
🏁 Penutup
Selamat! Kamu sekarang sudah bisa menghubungkan Express ke database sungguhan. Ini adalah langkah besar menjadi full-stack developer. Di tutorial selanjutnya (NodeJS #23) kita akan belajar mendeploy aplikasi ke internet (hosting gratis). Sampai jumpa!
Jangan lupa untuk mencoba latihan dan bereksperimen sendiri. Kalau ada pertanyaan, tulis di komentar. Selamat coding! 💻😊
Ditulis dengan ❤️ untuk para pemula yang ingin menjadi programmer handal.