🚀 Node.js HTTP Modülü ile Çerçevesiz Web Sunucusu Kurulumu
Bu rehberde Node.js'in yerleşik http modülünü kullanarak sıfırdan bir web sunucusu kurmayı öğreneceksiniz.
Express gibi çerçeveler olmadan, tamamen Node.js çekirdeğiyle çalışan hızlı ve mikro bir sunucu geliştireceğiz.
Aşağıdaki adımların her biri detaylı açıklamalar ve kod örnekleriyle hazırlanmıştır.
🧱 Adım 1 – Proje Klasörünü Oluşturma
İlk olarak sunucu dosyalarımızı saklayacağımız klasörü oluşturalım.
mkdir ilk-sunucular
cd ilk-sunucular
touch temel-sunucu.js
Bu adım, projenizi düzenli tutmanızı sağlar.
🧩 Adım 2 – Temel HTTP Sunucusunu Yazma
Aşağıdaki kod, gelen tüm istekleri dinleyen ve tek bir metin döndüren minimal bir HTTP sunucusudur.
const http = require("http");
const host = 'localhost';
const port = 8000;
const istekDinleyici = function (istek, yanit) {
yanit.writeHead(200);
yanit.end("Rabisu Bulut'taki ilk sunucum!");
};
const sunucu = http.createServer(istekDinleyici);
sunucu.listen(port, host, () => {
console.log(`Sunucu aktif: http://${host}:${port}`);
});
Bu adımda öğrendiğin şeyler: http.createServer() nasıl çalışır
req ve res nesnelerinin temel mantığı
Sunucunun nasıl dinlemeye başladığı
🟦 Adım 3 – Sunucuyu Çalıştırma ve Test Etme
Sunucuyu başlat:
node temel-sunucu.js
Çıktı:
Sunucu aktif: http://localhost:8000
Test etmek için:
curl http://localhost:8000
📄 Adım 4 – JSON İçerik Sunma
API yaparken en yaygın içerik türü JSON’dur.
yanit.setHeader("Content-Type", "application/json");
yanit.writeHead(200);
const veri = {
mesaj: "Bu bir JSON yanıtıdır.",
zamanDamgasi: Date.now(),
sunucu: "tr1-node01"
};
yanit.end(JSON.stringify(veri));
Neden önemlidir? JSON, API standartlarının temelidir.
Content-Type doğru olmazsa tarayıcı ve istemciler yanıtı yanlış işler.
🟥 Adım 5 – HTML İçerik Sunma
yanit.setHeader("Content-Type", "text/html");
yanit.writeHead(200);
yanit.end(`
<html>
<body>
<h1>Rabisu Bulut HTML Denemesi</h1>
<p>Node.js ile HTML çıktısı gönderiyoruz.</p>
</body>
</html>
`);
Bu adımda: Tarayıcıda görüntülenebilir bir HTML çıktısı oluşturmayı öğrendin.
🟧 Adım 6 – CSV İçerik Sunma
yanit.setHeader("Content-Type", "text/csv");
yanit.setHeader("Content-Disposition", "attachment;filename=rapor.csv");
yanit.writeHead(200);
yanit.end(`id,urun,stok\n1,Sunucu Örneği,50\n2,Veritabani,12`);
Dosya indirme mantığı: Content-Disposition başlığı indirme tetikler
CSV özellikle raporlamalarda kullanılır
📂 Adım 7 – Dosyadan HTML Sayfası Sunma (Gerçekçi Senaryo)
Bir HTML dosyası oluşturalım:
touch ana-sayfa.html
ana-sayfa.html
<!DOCTYPE html>
<html lang="tr">
<head>
<title>Rabisu Sunucusu</title>
<meta charset="UTF-8" />
<style>
body { background-color: #ff9933; text-align: center; padding-top: 50px; }
</style>
</head>
<body>
<h1>Tebrikler! Dosyadan HTML sunumu başarılı.</h1>
</body>
</html>
Sunucu tarafı:
const http = require("http");
const fs = require("fs");
const host = 'localhost';
const port = 8000;
const istekDinleyici = function (istek, yanit) {
yanit.setHeader("Content-Type", "text/html");
fs.readFile(__dirname + "/ana-sayfa.html", (hata, veri) => {
if (hata) {
yanit.writeHead(500);
return yanit.end("Hata: HTML dosyası okunamadı.");
}
yanit.writeHead(200);
yanit.end(veri);
});
};
const sunucu = http.createServer(istekDinleyici);
sunucu.listen(port, host, () => {
console.log(`Sunucu aktif: http://${host}:${port}`);
});
Burada öğrenilenler: fs.readFile() ile dosya okuma
Asenkron yapı
500 Internal Server Error nasıl verilir
❓ SSS – Sıkça Sorulan Sorular
1. Express yerine neden http modülünü kullanayım?
Bağımlılık olmadan hafif ve hızlı sunucular geliştirmek için idealdir.
2. Herkese açık sunucu nasıl yapılır?
host → "0.0.0.0"
3. writeHead() ve setHeader() farkı nedir?
setHeader: bağımsız başlık ekler
writeHead: durum kodu + başlıkları toplu gönderir
4. “EADDRINUSE” hatasını nasıl çözerim?
lsof -i :8000
Portu kullanan işlemi kapat veya port değiştir.
🎯 Sonuç
Bu rehberle:
Temel HTTP sunucusu kurdun
JSON, HTML, CSV yanıtları gönderdin
Dosyadan HTML sunmayı öğrendin
Node.js HTTP modülünün temellerini artık profesyonel seviyede biliyorsun.