Express.js Dasar — Node.js

Express.js adalah framework minimalis untuk membuat web server di Node.js. Setup dasar: import express from "express"; const app = express(); // Route GET /…

Express adalah framework kecil di atas modul http. Kamu cukup bilang "kalau ada GET /catatan, jawab begini", dan Express yang mencocokkan tiap request ke jawabannya. Bayangin resepsionis kantor dengan buku daftar: tiap tamu menyebut keperluan dan tujuannya, resepsionis membuka daftar dari atas dan mengantar ke orang yang tepat. Daftar itu adalah route-mu, dan orang yang menjawab adalah handler.

🧪 Tebakan cepat: tanpa app.use(express.json()), client mengirim POST /catatan dengan body JSON. Apa isi req.body? Tebak dulu, jawabannya ada di bagian "Membaca body: express.json()".

Memasang Express

Express bukan modul bawaan, jadi pasang dulu dari npm di folder proyek:

npm install express

npm mengunduhnya ke folder node_modules dan mencatatnya di package.json sebagai "express": "^5.2.1". Versi yang terpasang sekarang adalah Express 5. Banyak tutorial masih menulis Express 4, dan bedanya dibahas di bawah.

Server catatan, versi Express

server.js dari pelajaran sebelumnya ditulis ulang jadi app.js:

const express = require("express");
const app = express();
app.use(express.json());

const catatan = [
  { id: 1, judul: "Belanja", isi: "beli beras 5 kg" },
  { id: 2, judul: "Belajar", isi: "bab Node.js" },
];

app.get("/catatan", (req, res) => {
  res.json(catatan);
});

app.get("/catatan/:id", (req, res) => {
  const item = catatan.find((c) => c.id === Number(req.params.id));
  if (!item) {
    return res.status(404).json({ error: "Catatan tidak ditemukan" });
  }
  res.json(item);
});

app.post("/catatan", (req, res) => {
  const { judul, isi } = req.body;
  const baru = { id: catatan.length + 1, judul, isi };
  catatan.push(baru);
  res.status(201).json(baru);
});

app.listen(3000, () => {
  console.log("Server jalan di http://localhost:3000");
});

Mencocokkan request ke route

Request Route yang cocok Jawaban
GET /catatan GET /catatan 200, dua catatan
GET /catatan/2 GET /catatan/:id, req.params.id = "2" 200, {"id":2,"judul":"Belajar","isi":"bab Node.js"}
GET /catatan/9 GET /catatan/:id, req.params.id = "9" 404, {"error":"Catatan tidak ditemukan"}
GET /catatan?urut=judul GET /catatan, req.query.urut = "judul" 200, dua catatan
DELETE /catatan/1 gak ada 404 dari Express: Cannot DELETE /catatan/1

Membaca body: express.json()

Untuk mengirim catatan baru, client mengirim body JSON:

curl -i -X POST http://localhost:3000/catatan -H "Content-Type: application/json" -d '{"judul":"Olahraga","isi":"lari 5 km"}'

app.use(express.json()) memasang middleware, fungsi yang jalan untuk tiap request sebelum route-nya. Dia membaca body JSON dan menaruh hasilnya di req.body, jadi handler mendapat { judul: "Olahraga", isi: "lari 5 km" } dan menjawab 201 dengan {"id":3,"judul":"Olahraga","isi":"lari 5 km"}.

Tanpa baris itu, gak ada yang membaca body-nya, dan req.body isinya undefined. Itu jawaban tebakannya. Baris const { judul, isi } = req.body; lalu melempar TypeError: Cannot destructure property 'judul' of 'req.body' as it is undefined., dan Express menjawab 500 Internal Server Error. Bedanya dengan modul http: Express menangkap error dari handler, jadi server-nya tetap hidup.

Di latihan: route tanpa request sungguhan

Simulator latihan gak mengirim request ke aplikasimu, jadi tiga baris output-nya kamu cetak sendiri. Kode awal sudah membuat app dan mencetak Express app dibuat!. Daftarkan app.get("/hello", ...) yang menjawab res.json({ message: "Halo Dunia!" }), lalu cetak dua baris berikutnya:

Express app dibuat!
Route terdaftar: GET /hello
Response: {"message":"Halo Dunia!"}

📌 Express 4 atau 5?

npm install express sekarang memasang Express 5. Yang beda dari tutorial Express 4, untuk hal yang dibahas di sini:

⚠️ Jebakan yang sering ketemu

TL;DR: Pasang dengan npm install express (sekarang Express 5), muat dengan const express = require("express"), buat aplikasi dengan const app = express(). Daftarkan route dengan app.get dan app.post, jawab dengan res.json(data) atau res.status(201).json(data), dan nyalakan dengan app.listen(3000). :id di path masuk ke req.params.id (sebagai teks), query string ke req.query. Pasang app.use(express.json()) supaya body JSON terbaca di req.body. Tanpa itu req.body adalah undefined. Request tanpa route dijawab Express sendiri dengan 404.

Yang akan kamu pelajari