Ana içeriğe geç

🚀 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://$&#123;host&#125;:$&#123;port&#125;`);
});

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.