Implementasi CRUD dengan HTTP Method di Express JS - Perwira Learning Center


Latar Belakang

Pada artikel kedua ini, saya akan membahas implementasi CRUD (Create, Read, Update, Delete) REST API menggunakan Express.js. Setelah melakukan setup projek pada pembahasan sebelumnya, tahap selanjutnya adalah implementasi HTTP method (CRUD). Implementasi ini bertujuan untuk melihat secara langsung bagaimana proses pengelolaan data dilakukan melalui endpoint dan HTTP method yang sesuai.

Dengan mempraktikkan implementasi CRUD menggunakan Express.js, saya ingin memahami alur komunikasi antara client dan server secara lebih konkret, sehingga pemahaman terhadap REST API tidak hanya bersifat teoritis, tetapi juga dapat diterapkan dalam pengembangan aplikasi yang nyata.

Alat dan Bahan

A. Perangkat Lunak

  1. Terminal: Digunakan untuk membuat folder proyek serta menginstal dependensi yang dibutuhkan.
  2. Visual Studio Code: Digunakan sebagai text editor untuk menulis dan mengelola kode program.
  3. Node.js: Runtime environment agar JavaScript dapat dijalankan di sisi server.
  4. npm: Digunakan untuk mengelola dan menginstal library atau dependensi yang diperlukan.
  5. Postman: Digunakan untuk melakukan pengujian REST API.
  6. Google Chrome: Digunakan untuk mengakses aplikasi melalui URL yang tersedia.

B. Perangkat Keras

  1. Laptop dengan sistem operasi Ubuntu.

Struktur File

belajar-express
├── config/
│   └── Database.js
├── controllers/
│   └── UserController.js
├── models/
│   └── UserModel.js
├── routes/
│   └── UserRoute.js
├── request.rest
├── server.js
├── package.json
└── node_modules/

  1. Folder config
    Berisi konfigurasi untuk dependensi yang memerlukan proses setup. Pada proyek ini, folder config digunakan untuk mengatur koneksi database, yaitu konfigurasi koneksi ke MySQL agar aplikasi dapat terhubung dengan database.

  2. Folder controllers
    Berisi file yang memuat kode untuk memproses HTTP request method, seperti GET, POST, PATCH, dan DELETE. Controller bertugas menerima request dari client, memprosesnya, lalu mengirimkan response kembali ke client.

  3. Folder models
    Digunakan untuk mendefinisikan struktur tabel yang akan digunakan dalam proses CRUD. Pada bagian ini, dibuat model yang merepresentasikan tabel di database beserta tipe data setiap kolomnya.

  4. Folder routes
    Berisi konfigurasi routing atau endpoint aplikasi. Folder ini menghubungkan URL tertentu dengan function yang ada di controller.

  5. node_modules, package.json, dan package-lock.json
    Merupakan file dan folder bawaan hasil instalasi dependensi menggunakan NPM.

    • node_modules menyimpan seluruh library yang diinstal.

    • package.json berisi informasi proyek serta daftar dependensi.

    • package-lock.json mencatat versi detail setiap dependensi yang digunakan.

  6. request.rest
    Berisi kumpulan HTTP request dan response yang digunakan untuk menguji REST API. Fungsinya serupa dengan Postman, namun dapat dijalankan langsung di Visual Studio Code dengan menginstal extension REST Client.

  7. server.js
    Berisi konfigurasi utama server, termasuk pengaturan middleware dan penentuan port yang digunakan agar aplikasi dapat dijalankan dan diakses melalui browser atau API client.

Membuat table di database

Pada artikel sebelumnya kita sudah melakukan konfigurasi database, oleh karena itu pada kali ini kita bisa langsung untuk membuat table di dalam folder projek tanpa harus melalui mysql atau phpmyadmin.

models/UserModel.js

import { Sequelize } from "sequelize";
// import class Sequelize untuk akses fitur ORM


import db from "../config/Database.js";
// import koneksi database yang sudah dikonfigurasi

const {DataTypes} = Sequelize;
// ambil DataTypes untuk menentukan tipe data kolom

const User = db.define('users', {
// define model/tabel bernama 'users'

name : DataTypes.STRING,
// kolom name bertipe string

email : DataTypes.STRING,
// kolom email bertipe string

gender : DataTypes.ENUM('perempuan', 'laki laki'),
// kolom gender hanya boleh berisi 'perempuan' atau 'laki laki'

alamat : DataTypes.STRING
// kolom alamat bertipe string

}, {
freezeTableName:true
// mencegah sequelize mengubah nama tabel secara otomatis
});

export default User;
// export model agar bisa dipakai di file lain

(async()=>{
await db.sync();
// sinkronisasi model dengan database (buat tabel jika belum ada)
})();

Implementasi CRUD

1. Create (POST)

Create yaitu membuat sebuah data dan memasukkannya ke dalam tabel yang sudah dibuat, create menggunakan HTTP method POST, berikut contoh kodenya:

controllers/UserController.js

export const createUser = async(req, res) => {
// export function async untuk menangani request create user


try{
await User.create(req.body);
// membuat data user baru ke database berdasarkan data dari req.body

res.status(201).json({message: "User Created"});
// kirim response sukses dengan status 201 (created)

} catch (error){
console.log(error.message);
// tangkap dan tampilkan pesan error jika terjadi kesalahan
}
}

routes/UserRoute.js

import express from "express";
// import framework express untuk membuat routing


import { getUsers, getUsersById, createUser, updateUser, deletedUser} from "../controllers/UserController.js";
// import semua function controller yang akan menangani tiap request

const router = express.Router();
// buat instance router untuk mengatur endpoint

router.post('/users', createUser);
// endpoint POST /users → tambah user baru ke database

export default router;
// export router supaya bisa dipakai di file utama (misalnya app.js atau index.js)

request.rest

###
POST http://localhost:4000/users
Content-Type: application/json
// tambah user baru ke database (CREATE)
// body harus berbentuk JSON


{
"name" : "Jane Doe",
// nama user yang akan disimpan

"email" : "jane@gmail.com",
// email user

"gender" : "perempuan",
// gender (harus sesuai ENUM di model)

"alamat" : "Los Angeles"
// alamat user
}

response

HTTP/1.1 201 Created
X-Powered-By: Express
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=utf-8
Content-Length: 26
ETag: W/"1a-xJqzBGFXx3A38rPzxXyyeKiJbeQ"
Date: Mon, 16 Feb 2026 11:08:38 GMT
Connection: close


{
"message": "User Created"
}

2. Read (GET)

Read yaitu membaca sebuah data yang ada pada tabel dan menampilkannya ke halaman pengguna, read menggunakan HTTP method GET, berikut contoh kodenya

controllers/UserController.js

export const getUsers = async(req, res) => {
try{
const response = await User.findAll();
// ambil semua data user dari database


res.status(200).json(response);
// kirim semua data sebagai response dengan status 200 (success)
} catch (error){
console.log(error.message);
// tampilkan pesan error jika terjadi kesalahan
}
}

export const getUsersById = async(req, res) => {
try{
const response = await User.findOne({
where:{
id: req.params.id
}
});
// ambil satu user berdasarkan id dari parameter URL

res.status(200).json(response);
// kirim data user yang ditemukan
} catch (error){
console.log(error.message);
// tampilkan pesan error jika terjadi kesalahan
}
}

routes/UserRoute.js

import express from "express";
// import framework express untuk membuat routing


import { getUsers, getUsersById, createUser, updateUser, deletedUser} from "../controllers/UserController.js";
// import semua function controller yang akan menangani tiap request

const router = express.Router();
// buat instance router untuk mengatur endpoint

router.get('/users', getUsers);
// endpoint GET /users → panggil function getUsers untuk ambil semua data user

router.get('/users/:id', getUsersById);
// endpoint GET /users/:id → ambil satu user berdasarkan id dari parameter URL

export default router;
// export router supaya bisa dipakai di file utama (misalnya app.js atau index.js)

request.rest

GET http://localhost:4000/users
// ambil semua data user dari database (READ all)


###
GET http://localhost:4000/users/1
// ambil satu user berdasarkan id = 1 (READ by id)

response

HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=utf-8
Content-Length: 173
ETag: W/"ad-oYEeWrfN05EhllN0GGPhwT4ttKQ"
Date: Mon, 16 Feb 2026 11:08:25 GMT
Connection: close


{
"id": 1,
"name": "Jane Doe",
"email": "jane@gmail.com",
"gender": "perempuan",
"alamat": "Los Angeles",
"createdAt": "2026-02-12T16:55:08.000Z",
"updatedAt": "2026-02-12T16:55:08.000Z"
}

3. Update (PATCH)

Update yaitu mengubah isi sebuah data yang ada pada tabel, update menggunakan HTTP method PATCH, berikut contoh kodenya

controllers/UserController.js

export const updateUser = async(req, res) => {
try{
await User.update(req.body, {
where : {
id: req.params.id
}
})
// update data user berdasarkan id dengan data baru dari req.body


res.status(200).json({message: "User Updated"});
// kirim response sukses setelah data berhasil diupdate
} catch (error){
console.log(error.message);
// tampilkan pesan error jika terjadi kesalahan
}
}

routes/UserRoute.js

import express from "express";
// import framework express untuk membuat routing


import { getUsers, getUsersById, createUser, updateUser, deletedUser} from "../controllers/UserController.js";
// import semua function controller yang akan menangani tiap request

const router = express.Router();
// buat instance router untuk mengatur endpoint

router.patch('/users/:id', updateUser);
// endpoint PATCH /users/:id → update data user berdasarkan id

export default router;
// export router supaya bisa dipakai di file utama (misalnya app.js atau index.js)

request.rest

###
PATCH http://localhost:4000/users/3
Content-Type: application/json
// update data user dengan id = 3 (UPDATE)
// hanya id 3 yang akan diubah


{
"name" : "aisa",
// nama baru

"email" : "aisa@gmail.com",
// email baru

"gender" : "perempuan",
// gender baru

"alamat" : "UK"
// alamat baru
}

response

HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=utf-8
Content-Length: 26
ETag: W/"1a-ZW+n6cJyVDzAH9yoyyyaAwh8q8I"
Date: Mon, 16 Feb 2026 11:09:06 GMT
Connection: close


{
"message": "User Updated"
}

4. Delete (Delete)

Delete yaitu menghapus sebuah data yang ada pada tabel, delete menggunakan HTTP method DELETE, berikut contoh kodenya

controllers/UserController.js

export const deletedUser = async(req, res) => {
try{
await User.destroy({
where : {
id: req.params.id
}
})
// hapus data user berdasarkan id


res.status(200).json({message: "User Deleted"});
// kirim response sukses setelah data berhasil dihapus
} catch (error){
console.log(error.message);
// tampilkan pesan error jika terjadi kesalahan
}
}

routes/UserRoute.js

import express from "express";
// import framework express untuk membuat routing


import { getUsers, getUsersById, createUser, updateUser, deletedUser} from "../controllers/UserController.js";
// import semua function controller yang akan menangani tiap request

const router = express.Router();
// buat instance router untuk mengatur endpoint

router.delete('/users/:id', deletedUser);
// endpoint DELETE /users/:id → hapus user berdasarkan id

export default router;
// export router supaya bisa dipakai di file utama (misalnya app.js atau index.js)

request.rest

###
DELETE http://localhost:4000/users/3
// hapus user dengan id = 3 dari database (DELETE)


response

HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=utf-8
Content-Length: 26
ETag: W/"1a-Z3UYB/nyRLiTvbS5NPdV9+4PyLE"
Date: Mon, 16 Feb 2026 11:09:25 GMT
Connection: close


{
"message": "User Deleted"
}

Hasil Pembelajaran

Melalui praktik implementasi CRUD REST API menggunakan Express.js, saya memahami bagaimana konsep REST diterapkan secara langsung dalam pembuatan endpoint dan pengelolaan data. Saya mempelajari penggunaan HTTP Method seperti GET, POST, PATCH/PUT, dan DELETE sesuai dengan fungsinya masing-masing dalam operasi CRUD. Selain itu, saya juga memahami bagaimana request dari client diproses oleh server, kemudian menghasilkan response dalam format JSON.

Saya juga memperoleh pemahaman mengenai pentingnya struktur kode yang rapi, penggunaan middleware, serta integrasi dengan database untuk menyimpan dan mengelola data. Proses pengujian menggunakan REST Client membantu saya memastikan bahwa setiap endpoint berjalan dengan baik dan sesuai dengan kebutuhan sistem.

Kesimpulan

Implementasi CRUD REST API menggunakan Express.js memberikan gambaran yang lebih jelas mengenai bagaimana sistem backend bekerja dalam sebuah aplikasi web. Tidak hanya memahami teori REST API, tetapi juga mengetahui bagaimana cara membangun, mengelola, dan menguji endpoint secara langsung.

Dengan memahami implementasi CRUD ini, dasar pengembangan backend menjadi lebih kuat dan siap untuk dikembangkan ke tahap yang lebih lanjut, seperti penambahan fitur autentikasi, validasi data, serta pengelolaan error yang lebih optimal.

Daftar Pustaka

Fielding, R. T. (2000). Architectural styles and the design of network-based software architectures (Doctoral dissertation, University of California, Irvine).

OpenJS Foundation. (n.d.). Express.js documentation. Diakses pada 10 Februari 2026, dari https://expressjs.com/

Node.js Foundation. (n.d.). Node.js documentation. Diakses pada 10 Februari 2026, dari https://nodejs.org/

Sequelize. (n.d.). Sequelize documentation. Diakses pada 10 Februari 2026, dari https://sequelize.org/