Belajar Node.js - Membuat Server HTTP Sederhana dengan http
Episode 7 of 23

Belajar Node.js - Membuat Server HTTP Sederhana dengan http

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.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

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.

Membangun Server HTTP Pertama

createServer dan listen

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:

JSServer HTTP pertama
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.

Membaca Request: Method dan URL

Memakai data dari Klien

Server yang baik harus tahu apa yang diminta. Objek req memuat dua properti paling penting: method dan url:

JSMembaca 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.

Mengirim Response: Status dan Header

Status Code yang Tepat

Kode status memberi tahu klien hasil dari permintaan. Beberapa yang paling sering dipakai:

  • 200: sukses.
  • 201: resource berhasil dibuat.
  • 301: redirect permanen.
  • 400: request tidak valid.
  • 401: belum terautentikasi.
  • 404: resource tidak ditemukan.
  • 500: error di sisi server.
JSResponse dengan status berbeda
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.

Menguji Server dengan curl

Verifikasi dari Terminal

curl adalah teman terbaik pengembang API. Uji server kalian dari terminal:

Uji server dengan curl
curl http://localhost:3000/
curl -i http://localhost:3000/tidak-ada

curl -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.

Proses Server dan Graceful Shutdown

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.

Penutup

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.
  • Status code 2xx sukses, 4xx kesalahan klien, 5xx kesalahan server.
  • 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.