NodeJS #22: Koneksi ke Database (Opsional) – Pengenalan MongoDB atau MySQL

🍭 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, database sesuai 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.

💡 Tips: Jangan lupa buat tabel 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/testdb adalah URL koneksi ke MongoDB di komputer lokal. testdb adalah 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,
  // ...
});
⚠️ Penting: Tambahkan .env ke .gitignore agar tidak terupload ke GitHub!

🧪 Latihan Mandiri

  1. Pilih salah satu database (MySQL atau MongoDB) dan instal di komputer kamu.
  2. Buat database baru dengan nama latihan.
  3. Buat tabel/collection untuk menyimpan data "buku" (judul, penulis, tahun).
  4. Buat route GET /buku yang mengambil data dari database dan menampilkannya dalam format JSON.
  5. Buat route POST /buku untuk menambah buku baru (gunakan Postman untuk menguji).

📚 Rangkuman

  • MySQL menggunakan driver mysql2 dan query SQL [citation:1][citation:3].
  • MongoDB menggunakan mongoose dengan 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.

Lebih baru Lebih lama

نموذج الاتصال