Sitemap

Belajar CRUD Database MySQL dengan Express.js (Lanjutan Routing Dasar)

4 min readJan 16, 2026

--

Press enter or click to view image in full size

Pada artikel sebelumnya, kita sudah belajar routing dasar di Express.js menggunakan berbagai HTTP Method seperti GET, POST, PUT, dan DELETE. Pada lanjutan ini, kita akan menghubungkan Express.js dengan database MySQL dan menerapkan CRUD (Create, Read, Update, Delete) secara nyata.

Project ini sangat penting karena:

  • Backend hampir selalu terhubung ke database
  • Siswa belajar alur request → controller → database → response
  • Sudah mendekati backend real-world

Struktur Folder Project

Struktur Folder Project

Penjelasan Singkat:

  • server.js → file utama menjalankan server
  • router.js → pengatur endpoint API
  • controller → logika bisnis (CRUD)
  • config/db.js → konfigurasi database
  • .env → menyimpan data sensitif (host, user, password)

STEP BY STEP SETUP PROJECT

Step 1 — Install MySQL Driver

Press enter or click to view image in full size
Install MySQL Driver

Digunakan agar Node.js bisa terhubung ke database MySQL.

Step 2— Install dotenv

Press enter or click to view image in full size
Install dotenv

Digunakan untuk membaca variabel dari file .env

Konfigurasi Environment (.env)

File /src/.env:

File .env digunakan untuk menyimpan konfigurasi penting dan sensitif, terutama yang berhubungan dengan database.

File /sec/.env

DB_HOST=localhost
Artinya: Alamat tempat database MySQL berjalan
localhost berarti: Database berada di komputer yang sama dengan server Node.js

Contoh lain:

  • 127.0.0.1 → sama dengan localhost
  • 192.168.1.10 → database di komputer lain (LAN)
  • db.example.com → database di server online

DB_USER=root
Artinya: Username MySQL yang digunakan untuk login ke database
root adalah User default MySQL dan memiliki akses penuh

Catatan penting untuk siswa:

  • root boleh dipakai untuk belajar
  • TIDAK BOLEH dipakai di server produksi

DB_PASSWORD=
Artinya: Password user MySQL

Karena kosong:
Berarti:

  • User root tidak memiliki password
  • Umum di XAMPP / Laragon (local)

DB_NAME=latihan_db
Artinya: Nama database yang akan digunakan oleh aplikasi

Dalam MySQL:

Kode untuk pembuatan database

Jika database tidak ada, maka:

  • Aplikasi error
  • Koneksi gagal

Kenapa pakai .env?

  • Lebih aman
  • Mudah diganti tanpa ubah kode
  • Best practice backend

Penjelasan File server.js

Press enter or click to view image in full size
File /src/server.js

Penjelasan:

  • require() → mengambil module
  • express() → membuat aplikasi backend
  • express.json() → agar server bisa membaca data JSON
  • app.use('/', router) → semua request diarahkan ke router
  • app.listen() → menjalankan server

Konfigurasi Database (db.js)

File /src/config/db.js

Penjelasan:

  • mysql2/promise → agar bisa pakai async/await
  • dotenv.config() → membaca file .env
File /src/config/db.js

Konsep Penting:

  • Connection Pool → efisien, tidak buat koneksi berulang
  • process.env → ambil data dari .env
Press enter or click to view image in full size
File /src/config/db.js

pool adalah kumpulan koneksi database yang sudah disiapkan.

Get Muh. Alif Anhar’s stories in your inbox

Join Medium for free to get updates from this writer.

Bayangkan:

  • Database = warung
  • Koneksi = kursi
  • Pool = sekumpulan kursi siap pakai

Jadi:

  • Tidak perlu buat koneksi baru setiap request
  • Lebih cepat

getConnection() artinya:
“Ambil satu koneksi dari pool untuk digunakan”

Fungsi ini:

  • Mengecek apakah database bisa diakses
  • Mengembalikan Promise
File /src/config/db.js

Apa itu module.exports?

  • Digunakan untuk mengirim data/fungsi ke file lain
  • Agar db.js bisa digunakan di controller

Routing (router.js)

Press enter or click to view image in full size
File /src/router/router.js

Artinya: Mengambil fungsi CRUD dari controller

Press enter or click to view image in full size
File /src/router/router.js

Kenapa pakai Controller?

  • Kode lebih rapi
  • Mudah dirawat
  • Sudah mendekati arsitektur MVC

Controller (basoController.js)

  1. Mengambil Semua Data (GET)
Press enter or click to view image in full size
File /src/controller/basoController.js

Penjelasan:

  • async/await → menunggu hasil query
  • db.query() → menjalankan SQL
  • rows → hasil data dari database

2. Get Data by ID

Press enter or click to view image in full size
File /src/controller/basoController.js
  • req.params → ambil parameter dari URL
  • ? → mencegah SQL Injection

3. Insert Data (POST)

Press enter or click to view image in full size
File /src/controller/basoController.js
  • req.body → data dari client
  • INSERT INTO → simpan data

4. Update Data (PUT)

Press enter or click to view image in full size
File /src/controller/basoController.js

5. Delete Data (DELETE)

Press enter or click to view image in full size
File /src/controller/basoController.js

6. module.exports dan require

Press enter or click to view image in full size
File /src/controller/basoController.js

module.exports
Digunakan untuk mengirim fungsi/variabel keluar file.

require()
Digunakan untuk mengambil module dari file lain.

Tanpa ini File tidak bisa saling berkomunikasi

Project ini adalah langkah besar dari routing sederhana menuju backend yang sesungguhnya.
Siswa yang memahami materi ini akan lebih siap belajar:

  • MVC Architecture
  • Authentication
  • REST API
  • Project backend skala besar

--

--

Muh. Alif Anhar
Muh. Alif Anhar

Written by Muh. Alif Anhar

Founder ZeeTech IT Solution & ZeeTech Academy, passionate in web development and teaching at Telkom High School