BlogNode.jsMembuat REST API CRUD dengan Node.js, Express, dan MySQL
Node.js

Membuat REST API CRUD dengan Node.js, Express, dan MySQL

Z

Zelixify

Editor

12 Oktober 2025 4 menit baca

Dalam pengembangan aplikasi modern, REST API menjadi salah satu komponen penting untuk menghubungkan frontend dan backend. Salah satu kombinasi populer untuk membangun REST API adalah menggunakan Node.js dan Express sebagai server, serta MySQL sebagai database.

Pada artikel ini, kamu akan belajar langkah demi langkah membuat CRUD API (Create, Read, Update, Delete) sederhana menggunakan Node.js, Express, dan MySQL.

1. Persiapan Awal

a. Instalasi Tools yang Diperlukan

Pastikan kamu sudah menginstal:

  • Node.js

  • MySQL Server

  • Text editor seperti VS Code

b. Buat Folder Project

mkdir nodejs-crud-api
cd nodejs-crud-api

c. Inisialisasi Project Node.js

npm init -y

d. Install Dependencies

npm install express mysql2 body-parser cors
  • express → framework untuk membuat server.

  • mysql2 → koneksi ke database MySQL.

  • body-parser → parsing data dari request body.

  • cors → agar API bisa diakses dari frontend lain.

2. Membuat Struktur Folder

Buat struktur sederhana seperti ini:

nodejs-crud-api/
│
├── db.js
├── server.js
└── routes/
    └── userRoutes.js

3. Konfigurasi Database (MySQL)

Buat database baru di MySQL:

CREATE DATABASE crud_api;
USE crud_api;

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100),
  email VARCHAR(100),
  age INT
);

4. Koneksi ke Database (db.js)

require("dotenv").config();
const mysql = require("mysql2/promise");

const db = mysql.createPool({
  host: process.env.DB_HOST || "localhost",
  user: process.env.DB_USER || "root",
  password: process.env.DB_PASSWORD || "",
  database: process.env.DB_NAME || "crud_api",
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0
});

(async () => {
  try {
    const connection = await db.getConnection();
    console.log("✅ Database connected!");
    connection.release();
  } catch (error) {
    console.error("❌ Database connection failed:", error.message);
    process.exit(1);
  }
})();

module.exports = db;

5. Membuat Server (server.js)

require("dotenv").config();
const express = require("express");
const cors = require("cors");
const userRoutes = require("./routes/userRoutes");

const app = express();

app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.use("/api/users", userRoutes);

app.use((req, res) => {
  res.status(404).json({ message: "Endpoint not found" });
});

app.use((err, req, res, next) => {
  console.error(err);
  res.status(500).json({ message: "Internal server error" });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`🚀 Server running at http://localhost:${PORT}`);
});

6. Membuat Routing CRUD (routes/userRoutes.js)

const express = require("express");
const router = express.Router();
const db = require("../db");

// CREATE
router.post("/", async (req, res) => {
  try {
    const { name, email, age } = req.body;

    if (!name || !email || age === undefined) {
      return res.status(400).json({ message: "Data tidak lengkap" });
    }

    const sql = "INSERT INTO users (name, email, age) VALUES (?, ?, ?)";
    const [result] = await db.execute(sql, [name, email, age]);

    res.status(201).json({
      message: "User berhasil ditambahkan",
      id: result.insertId
    });
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
});

// READ ALL
router.get("/", async (req, res) => {
  try {
    const [rows] = await db.execute("SELECT * FROM users");
    res.json(rows);
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
});

// READ BY ID
router.get("/:id", async (req, res) => {
  try {
    const { id } = req.params;
    const [rows] = await db.execute("SELECT * FROM users WHERE id = ?", [id]);

    if (rows.length === 0) {
      return res.status(404).json({ message: "User tidak ditemukan" });
    }

    res.json(rows[0]);
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
});

// UPDATE
router.put("/:id", async (req, res) => {
  try {
    const { id } = req.params;
    const { name, email, age } = req.body;

    const sql = "UPDATE users SET name = ?, email = ?, age = ? WHERE id = ?";
    const [result] = await db.execute(sql, [name, email, age, id]);

    if (result.affectedRows === 0) {
      return res.status(404).json({ message: "User tidak ditemukan" });
    }

    res.json({ message: "User berhasil diperbarui" });
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
});

// DELETE
router.delete("/:id", async (req, res) => {
  try {
    const { id } = req.params;
    const [result] = await db.execute("DELETE FROM users WHERE id = ?", [id]);

    if (result.affectedRows === 0) {
      return res.status(404).json({ message: "User tidak ditemukan" });
    }

    res.json({ message: "User berhasil dihapus" });
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
});

module.exports = router;

7. Menjalankan Server

Jalankan server dengan perintah:

node server.js

Jika berhasil, terminal akan menampilkan:

✅ Database connected!
🚀 Server running at http://localhost:3000

8. Uji API dengan Postman / Thunder Client

Gunakan Postman untuk mengetes endpoint berikut:

MetodeEndpointKeteranganGET/api/usersAmbil semua dataGET/api/users/:idAmbil data berdasarkan IDPOST/api/usersTambah data baruPUT/api/users/:idUbah dataDELETE/api/users/:idHapus data

Contoh body untuk POST:

{
  "name": "John Doe",
  "email": "john@example.com",
  "age": 25
}

9. Kesimpulan

Dengan kombinasi Node.js, Express, dan MySQL, kamu bisa membuat REST API CRUD yang cepat, fleksibel, dan mudah dikembangkan. Struktur ini juga cocok untuk diintegrasikan dengan frontend modern seperti React, Vue, atau Flutter.

💡 Tips: Setelah API ini stabil, kamu bisa menambahkan fitur seperti validasi data, autentikasi JWT, atau pagination agar lebih lengkap dan siap produksi.

Bagikan Artikel Ini

Tags

crud rest apiNode.jsexpressmysqlCRUD APIExpress MySQLREST API TutorialNode.js DevelopmentMySQL REST APIBelajar Node.jsAPI Backend

Ingin Membuat Website atau Aplikasi Seperti Ini?

Tim Zelixify siap membantu Anda membangun solusi digital profesional dengan desain premium dan teknologi terkini.