Membedah arsitektur Express dari request pipeline, objek req dan res, middleware chaining dengan next(), hingga hirarki App, Router, dan middleware — konsep inti yang menjadi fondasi semua episode berikutnya.

Setelah di episode 1 kita memahami sejarah dan posisi Express di 2026, saatnya memahami cara kerjanya dari dalam. Episode 2 adalah episode paling konseptual di seluruh series — semua yang akan kalian tulis mulai episode 3 sampai episode 27 adalah variasi dari satu pola: request mengalir melalui pipeline middleware.
Mengapa ini penting? Karena kesalahan paling umum developer Express bukan di sintaks, melainkan di urutan dan konsep alur: middleware yang dipasang di tempat salah, next() yang tidak dipanggil, atau handler yang memproses request sebelum body di-parsing. Memahami pipeline sejak awal akan menghemat puluhan jam debugging.
Express memiliki tiga lapisan yang bekerja bersama:
express(). Pemilik global konfigurasi, mount point, dan daftar middleware level app./users), yang di-mount ke app (dibahas penuh di episode 8).Setiap request yang masuk akan melewati lapisan-lapisan ini dari atas ke bawah sampai ada yang menghasilkan response atau next() tidak lagi dipanggil.
Express menerima dua objek inti di setiap handler:
req)Objek req membungkus request HTTP mentah dan menambahkan properti hasil parsing:
| Properti | Isi | Dibahas di |
|---|---|---|
req.params | Path parameters, misal :id | Episode 4, 6 |
req.query | Query string yang di-parse | Episode 4, 6 |
req.body | Body request (setelah middleware parser) | Episode 5, 6 |
req.headers | Header HTTP (lowercase key) | Episode 6 |
req.ip | Alamat IP client | Episode 6 |
res)Objek res adalah kendaraan untuk mengirim response:
res.status(201).json(data) — mengirim JSON dengan status tertentu.res.redirect(url) — memindahkan client ke URL lain.res.send(...) — mengirim response dengan tipe yang disimpulkan.Detail lengkap kedua objek ini dibahas di episode 6; di sini yang perlu diingat adalah keduanya objek yang sama yang disalurkan sepanjang pipeline — middleware bisa menambahkan data ke req (misalnya req.user) yang lalu dibaca handler di bawahnya.
Middleware hanyalah fungsi biasa dengan tiga argumen:
function myMiddleware(req, res, next) {
console.log(`${req.method} ${req.url}`)
next()
}Fungsi ini melakukan sesuatu (boleh memodifikasi req/res), lalu memanggil next() untuk meneruskan kontrol ke middleware berikutnya. Jika next() tidak dipanggil, request macet — ini salah satu bug paling umum.
Ada dua kemungkinan jalan yang diambil sebuah middleware:
next() → request lanjut ke langkah berikutnya.res.json(...) atau res.redirect(...)) → pipeline berhenti di sini.function requireAuth(req, res, next) {
if (!req.headers.authorization) {
return res.status(401).json({ error: "Unauthorized" })
}
next()
}Perhatikan return sebelum res.status(...) — tanpa return, kode di bawahnya tetap dieksekusi dan next() dipanggil setelah response dikirim, yang menghasilkan error "headers already sent".
Middleware error memiliki empat argumen dan dikenali dari jumlah parameternya:
app.use((err, req, res, next) => {
console.error(err)
res.status(500).json({ error: "Internal Server Error" })
})Express membedakan middleware normal (3 argumen) dari error handler (4 argumen) murni dari length fungsi. Saat middleware memanggil next(err), Express melompat langsung ke middleware error terdekat — seluruh pipeline normal dilewati. Kita bedah topik ini penuh di episode 7.
app.use() bisa dipasang dengan prefix path, membatasi cakupan middleware:
app.use("/api", myMiddleware) // hanya untuk path yang diawali /api
app.use(myMiddleware) // untuk semua requestMiddleware yang dipasang di app berlaku untuk seluruh request; middleware yang dipasang di router hanya untuk request yang masuk ke router tersebut. Ini kunci pemahaman episode 8 saat kita memecah aplikasi menjadi modul-modul.
Important
Urutan pemasangan middleware sangat menentukan perilaku. Parser body yang dipasang setelah route handler tidak akan pernah dijalankan untuk route itu — body tetap kosong. Sepanjang series ini, kalian akan selalu melihat urutan: parser → logging → custom middleware → router → error handler.
Episode 2 membedah fondasi arsitektur Express: request yang mengalir melalui pipeline App → Router → Middleware → Handler, objek req/res sebagai media komunikasi, serta peran next() sebagai pengendali alur.
Inti yang harus dibawa pulang:
req dan res dibawa sepanjang pipeline; middleware bisa memperkaya req untuk handler di bawahnya.next() atau mengakhiri response — tidak boleh keduanya bolak-balik secara tidak disengaja.next(err).Di episode 3 selanjutnya kita akan menulis kode pertama: setup project dan Hello World — dari npm init, menginstall Express 5, menyusun struktur folder routes/controllers/models/middleware, hingga menjalankan server pertama dengan node --watch. Sampai jumpa di episode 3!