Membangun proyek Express 5 dari nol: npm init, install express, struktur folder routes controllers models dan middleware, server Hello World, npm scripts, dan mode development dengan node --watch.

Setelah di episode 2 kita memahami arsitektur pipeline Express, saatnya menulis kode nyata. Episode 3 adalah pijakan hands-on pertama: membuat proyek dari nol, menginstall Express 5, menyusun struktur folder yang rapi, dan menjalankan server Hello World.
Mengapa struktur folder penting dibahas sedini mungkin? Karena kebiasaan menata kode di awal menentukan seberapa mudah aplikasi dirawat saat sudah ratusan route. Express sendiri tidak memaksa struktur apa pun — justru karena unopinionated, kalian harus mendisiplinkan diri. Struktur yang kita pakai di episode ini akan menjadi fondasi refactor di episode 8.
Buat direktori dan inisialisasi proyek Node:
mkdir express-lab && cd express-lab
npm init -y
npm install express@5npm install express@5 memasang Express 5.x. Catat bahwa package-lock.json ikut dibuat — file ini wajib di-commit ke git agar versi dependency terkunci persis di semua environment.
package.json bisa mengaktifkan ES Modules dengan menambahkan "type": "module". Modern, dan ini yang kita pakai sepanjang series:
{
"name": "express-lab",
"version": "1.0.0",
"type": "module",
"scripts": {
"dev": "node --watch src/app.js",
"start": "node src/app.js"
},
"dependencies": {
"express": "^5.2.1"
}
}node --watch (tersedia sejak Node 18) me-restart server otomatis saat file berubah — pengganti nodemon yang ringan tanpa dependency tambahan.
Express tidak memaksa struktur, tapi pola berikut adalah standar umum yang berskala baik:
express-lab/
package.json
src/
app.js # inisialisasi app + middleware global
server.js # memulai server (listen)
routes/ # definisi route per resource
users.js
controllers/ # logika bisnis per resource
userController.js
models/ # akses data / schema
middleware/ # custom middleware
utils/
.env # konfigurasi (dibahas episode 16)
.gitignoreAturan pembagiannya sederhana: routes hanya mendefinisikan path dan metode, controllers berisi logika yang dijalankan, models berkomunikasi dengan database. Episode 8 akan merefactor aplikasi ke struktur ini secara penuh.
src/app.js membangun objek app dan memasang middleware dasar:
import express from "express"
const app = express()
app.use(express.json())
app.get("/", (req, res) => {
res.json({ message: "Hello, Express 5!" })
})
app.get("/health", (req, res) => {
res.status(200).json({ status: "ok" })
})
export default appPerhatikan bahwa app.js tidak memanggil listen — pemisahan ini (app vs server) membuat app mudah diuji nanti tanpa harus membuka port sungguhan.
src/server.js memulai proses:
import app from "./app.js"
const PORT = process.env.PORT || 3000
app.listen(PORT, () => {
console.log(`Server berjalan di http://localhost:${PORT}`)
})app.listen(PORT, callback) membuat server HTTP dan mulai menerima koneksi di port tersebut. Argumen process.env.PORT || 3000 membuat aplikasi siap dipetakan ke port yang diberikan platform deployment (kita bahas di episode 24).
npm run dev
curl -s http://localhost:3000/health
curl -s -X POST http://localhost:3000/ -H "Content-Type: application/json" \
-d '{"name":"express"}'curl -s http://localhost:3000/health harus mengembalikan {"status":"ok"}. Percobaan POST ke / membuktikan express.json() sudah bekerja — tanpa middleware itu, req.body akan kosong (kita bedah di episode 5).
Node.js menghasilkan folder node_modules yang bisa ratusan megabyte. Tambahkan .gitignore sejak awal:
node_modules/
.env
*.log.env masuk ke gitignore karena berisi secret — pembahasannya di episode 16.
Jika app.listen ditaruh di app.js, setiap import (termasuk saat testing) ikut membuka port. Pemisahan app/server di atas adalah pola yang benar dan akan dipakai di episode-episode berikutnya.
Tip
Jalankan npm run dev lalu ubah pesan di route / — server akan restart otomatis berkat node --watch. Alur edit → langsung terlihat ini akan mempercepat seluruh praktik series.
Episode 3 menuntaskan pijakan hands-on: proyek Express 5 berdiri dengan npm init dan npm install express@5, struktur folder routes/controllers/models/middleware disiapkan, server Hello World berjalan dengan pemisahan app/server, dan node --watch mempercepat iterasi.
Inti yang harus dibawa pulang:
npm install express@5 dan commit lockfile untuk penguncian versi."type": "module" untuk ES Modules modern.app.js (setup) dan server.js (listen) agar mudah diuji.node --watch menggantikan nodemon tanpa dependency tambahan.Di episode 4 selanjutnya kita akan membahas routing — route methods GET/POST/PUT/DELETE, path parameters, query string, route patterns, dan app.route() — untuk membangun REST routing yang benar. Pastikan server Hello World kalian masih berjalan, karena kita akan mengembangkannya!