Episode ini memperkenalkan Express sebagai penyempurnaan pola server Node.js murni: routing dengan app.get dan app.post, middleware express.json, penanganan 404, dan error handler. Kalian membangun API REST pertama dengan Express.

Routing manual dengan if bertumpuk di episode 8 bisa bertahan untuk dua atau tiga endpoint. Untuk API nyata dengan puluhan route, kalian butuh framework. Express adalah framework web paling populer untuk Node.js — ringan, minimal, dan dibangun di atas pola yang sudah kalian kenal: handler, middleware, dan next.
Episode 9 memperkenalkan Express secara praktis: menginstall, mendefinisikan route dengan app.get dan app.post, memakai middleware express.json, serta menangani 404 dan error secara terpusat. Di akhir episode, kalian memiliki API REST pertama yang siap dikembangkan.
Mulai dari folder project yang sudah diinisialisasi di episode 2, lalu tambahkan Express:
npm install expressnpm install express menambahkan Express ke dependencies di package.json dan mengunduh seluruh dependensinya. Verifikasi instalasi dengan npm ls express — output menunjukkan versi yang terpasang, misalnya express@5.x.x.
Express mengubah pola if menjadi pemanggilan metode. Setiap route menerima handler yang sama seperti di Node.js murni, plus fitur tambahan seperti route parameter:
import express from "express";
const app = express();
app.use(express.json());
app.get("/", (req, res) => {
res.send("Halo dari Express");
});
app.get("/pengguna/:id", (req, res) => {
res.json({ id: req.params.id, nama: "Arman" });
});
app.post("/pengguna", (req, res) => {
res.status(201).json({ diterima: req.body });
});
app.listen(3000, () => {
console.log("API berjalan di http://localhost:3000");
});app.get("/pengguna/:id", ...) mendefinisikan route dengan parameter dinamis :id yang diakses lewat req.params.id. Untuk method lain, gunakan app.post, app.put, dan app.delete. res.json mengirim objek sebagai JSON dengan Content-Type: application/json.
Di Node.js murni, membaca body butuh event data dan end. Express menyediakan middleware express.json() yang melakukan semuanya:
import express from "express";
const app = express();
app.use(express.json({ limit: "1mb" }));
app.use((req, res, next) => {
console.log(req.method, req.url);
next();
});
app.post("/data", (req, res) => {
res.json({ body: req.body });
});app.use(express.json({ limit: "1mb" })) mem-parsing body JSON sekaligus membatasi ukurannya. Middleware custom dipasang dengan app.use — urutan pemasangan penting: express.json harus terpasang sebelum route yang membaca req.body.
Tanpa handler 404, Express membalas request yang tidak dikenal dengan HTML default. Definikan fallback setelah semua route:
app.use((req, res) => {
res.status(404).json({ error: "Route tidak ditemukan" });
});
app.use((err, req, res, next) => {
console.error(err.message);
res.status(500).json({ error: "Terjadi kesalahan server" });
});Handler 404 dipasang di akhir dan membalas semua request yang tidak cocok dengan route mana pun. Error handler dikenali dari empat argumen (err, req, res, next) — Express mengarahkan error ke sini secara otomatis ketika sebuah handler melempar error atau memanggil next(err).
Jalankan server dan uji endpoint kalian:
node app.js
curl -i http://localhost:3000/pengguna/42
curl -X POST http://localhost:3000/pengguna -H "Content-Type: application/json" -d '{"nama":"Arman"}'curl -X POST http://localhost:3000/pengguna -H "Content-Type: application/json" -d '{...}' mengirim data JSON sebagai body. Response yang benar harus menampilkan status 201 untuk route POST dan 200 untuk GET. Detail format respons JSON akan kita sempurnakan di episode 10.
Express adalah pilihan paling umum, tapi bukan satu-satunya. Fastify menawarkan performa lebih tinggi dengan validasi skema bawaan, NestJS membawa arsitektur berstruktur untuk tim besar, dan Hono meringankan aplikasi yang berjalan di edge. Untuk series ini kita fokus ke Express karena ekosistemnya paling luas dan dokumentasinya paling lengkap, tapi konsep yang kalian pelajari — middleware, handler, dan response — berlaku di semuanya.
Inti yang harus dibawa pulang:
req.params mengakses route parameter seperti :id.res.json mengirim respons JSON dengan header yang benar.app.use(express.json()) mem-parsing body dengan batas ukuran.Di episode 10 selanjutnya kita akan membahas JSON API, CORS, dan format respons — desain payload JSON yang konsisten, pemilihan status code yang tepat, header CORS untuk aplikasi frontend, serta penanganan preflight OPTIONS. Kalian akan membuat API yang siap dikonsumsi frontend.