Server HTTP dengan Modul http Bawaan
Membuat server web pertama: request, response, status code, header, dan routing manual.
Server web dalam beberapa baris
const http = require('http');
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
res.end('Halo dari Node!');
});
server.listen(3000, () => {
console.log('Server jalan di http://localhost:3000');
});
Fungsi yang diberikan ke createServer dipanggil setiap ada permintaan. Ia menerima dua objek: req (permintaan masuk) dan res (respons yang akan kamu kirim).
Request: apa yang diminta klien?
req.method—GET,POST,PUT,DELETE, ...req.url— path + query, mis./produk?kategori=kopi.req.headers— header (huruf kecil), mis.req.headers['content-type'].- Body:
reqadalah stream yang dibaca lewat eventdata/end.
Response: jawabanmu
res.statusCode = 404; // atau res.writeHead(404, { ... })
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify({ error: 'Tidak ditemukan' })); // SELALU akhiri dengan end()
Lupa memanggil res.end() membuat klien menggantung menunggu jawaban.
Kode status HTTP yang paling umum
| Kode | Arti | Kapan |
|---|---|---|
| 200 OK | Berhasil | GET sukses |
| 201 Created | Sumber daya dibuat | POST sukses |
| 204 No Content | Sukses tanpa isi | DELETE sukses |
| 400 Bad Request | Permintaan salah/tak valid | Validasi gagal |
| 401 Unauthorized | Belum login | Token tak ada |
| 403 Forbidden | Tidak punya izin | |
| 404 Not Found | Tidak ada | Path/ID tidak dikenal |
| 500 Internal Server Error | Kesalahan server | Bug / error tak terduga |
Routing manual
const server = http.createServer((req, res) => {
const url = new URL(req.url, 'http://localhost');
if (req.method === 'GET' && url.pathname === '/') {
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
return res.end('Halo dari Node!');
}
if (req.method === 'GET' && url.pathname === '/api/waktu') {
res.setHeader('Content-Type', 'application/json');
return res.end(JSON.stringify({ pesan: 'ok' }));
}
res.statusCode = 404;
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify({ error: 'Tidak ditemukan' }));
});
Membaca body (POST)
let body = '';
req.on('data', (chunk) => { body += chunk; });
req.on('end', () => {
const data = JSON.parse(body); // bungkus try/catch: klien bisa mengirim JSON rusak!
res.statusCode = 201;
res.end(JSON.stringify(data));
});
Mengapa kebanyakan orang memakai framework
Dengan http mentah kamu harus mengurus routing, parsing body, header, validasi, dan error sendiri — membosankan dan rawan bug. Express (bab berikutnya) membungkus semuanya. Tetapi memahami http penting: Express, Fastify, dan NestJS semua berdiri di atasnya.
Menguji server
Di komputer asli: buka browser di http://localhost:3000, atau curl, atau Postman/Thunder Client. Di KelasIT, server "mendengarkan" di simulator; fetch('http://localhost:3000/...') dari kodemu sendiri dialihkan ke server itu.