Episode ini membangun server HTTP pertama dengan modul core http: createServer, membaca method dan URL dari request, mengirim response dengan status code dan header, serta menguji seluruhnya dengan curl dari terminal.

Semua yang sudah kalian pelajari — modul core, event loop, file I/O — menemukan panggung utamanya di sini: server HTTP. Node.js menyediakan modul http yang membuat kalian bisa menyajikan respons HTTP hanya dengan beberapa baris kode, tanpa framework apa pun.
Episode 7 membangun server HTTP pertama kalian dari nol: createServer, cara membaca method dan URL dari request, cara mengirim response dengan status code dan header yang benar, serta menguji semuanya dengan curl. Ini fondasi yang akan dipakai langsung oleh Express di episode 9.
Server HTTP di Node.js dibangun dari satu fungsi handler yang dipanggil untuk setiap request. Modul http mengembalikan server dari createServer, lalu server diaktifkan dengan listen:
import http from "node:http";
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader("Content-Type", "text/plain; charset=utf-8");
res.end("Halo dari Node.js");
});
server.listen(3000, () => {
console.log("Server berjalan di http://localhost:3000");
});Jalankan dengan node server.js, lalu buka http://localhost:3000 di browser. Fungsi handler menerima req (request) dan res (response), res.statusCode menetapkan kode status, setHeader menetapkan header, dan res.end mengirim isi response.
Server yang baik harus tahu apa yang diminta. Objek req memuat dua properti paling penting: method dan url:
import http from "node:http";
const server = http.createServer((req, res) => {
console.log(req.method, req.url);
res.end("Method: " + req.method + ", URL: " + req.url);
});
server.listen(3000);Setiap request masuk, console.log(req.method, req.url) mencatat method seperti GET atau POST beserta path seperti /halaman. Inilah bahan dasar untuk membuat routing — kita akan membangun router lengkap di episode 8.
Kode status memberi tahu klien hasil dari permintaan. Beberapa yang paling sering dipakai:
import http from "node:http";
const server = http.createServer((req, res) => {
if (req.url === "/") {
res.writeHead(200, { "Content-Type": "text/html" });
res.end("<h1>Beranda</h1>");
} else {
res.writeHead(404, { "Content-Type": "text/plain" });
res.end("Halaman tidak ditemukan");
}
});
server.listen(3000);Perhatikan res.writeHead(404, {...}) yang menetapkan status code dan header sekaligus. Kombinasi status yang benar dengan header Content-Type yang sesuai adalah ciri API yang baik.
curl adalah teman terbaik pengembang API. Uji server kalian dari terminal:
curl http://localhost:3000/
curl -i http://localhost:3000/tidak-adacurl -i http://localhost:3000/tidak-ada menampilkan status line dan header beserta body — cara tercepat melihat apakah response kalian sudah benar. Untuk server yang berjalan, curl akan kita pakai secara intensif di episode 8 sampai 10 untuk menguji API.
Server berjalan tanpa henti menunggu request. Untuk menghentikannya, tekan Ctrl+C di terminal. Di production, kalian perlu menangani sinyal berhenti secara elegan — membersihkan koneksi database sebelum keluar — yang akan kita bahas mendalam di episode 22.
Inti yang harus dibawa pulang:
http.createServer membuat server dengan satu fungsi handler.server.listen(port) mengaktifkan server di port tertentu.req.method dan req.url adalah bahan dasar routing.res.writeHead menetapkan status code dan header sekaligus.curl -i menampilkan status line, header, dan body untuk pengujian cepat.Di episode 8 selanjutnya kita akan membahas routing, middleware, dan request/response — membangun router manual, parsing query string, pola middleware dengan fungsi next, dan membaca body request. Setelah ini kalian bisa membuat API multi-route dengan Node.js murni.