Node.js HTTP Modülü ile Web Sunucusu Oluşturma
Bu rehberde ne öğreneceksiniz?
Bu rehberde Node.js’in yerleşik HTTP modülü ile sıfırdan web sunucusu oluşturacaksınız.
Routing, JSON/HTML yanıtları, static dosya sunma ve temel güvenlik adımlarını göreceksiniz.
HTTP Modülü Nedir?
HTTP modülü, Node.js’in çekirdek bileşenidir.
Ek paket gerektirmeden HTTP sunucusu oluşturmanızı sağlar.
Avantajları:
- Framework yok
- Düşük bellek kullanımı
- HTTP mantığını doğrudan kontrol
Ön Gereksinimler
- Node.js 20 veya üzeri
- Temel JavaScript bilgisi
- Terminal kullanımı
1. Basit HTTP Sunucusu Oluşturma
Bu adımda herkesin erişebileceği basit bir sunucu kurulur.
const http = require("http");
const server = http.createServer((req, res) => {
res.writeHead(200);
res.end("Merhaba Node.js");
});
server.listen(8000);
- Bu kod, 8000 portunda çalışan basit bir HTTP sunucusu oluşturur.
2. JSON Yanıt Döndürme
- API geliştirmek için JSON yanıt gerekir.
res.setHeader("Content-Type", "application/json");
res.writeHead(200);
res.end(JSON.stringify({ status: "ok" }));
- Bu yapı, istemcinin yanıtı JSON olarak işlemesini sağlar.
3. HTML İçerik Döndürme
- Tarayıcılar için HTML yanıt döndürülür.
res.setHeader("Content-Type", "text/html");
res.writeHead(200);
res.end("<h1>Merhaba</h1>");
- HTML içerik doğrudan response gövdesine yazılır.
4. Dosyadan HTML Sunma
- HTML dosyaları diskten okunabilir.
const fs = require("fs");
fs.readFile("index.html", (err, data) => {
res.writeHead(200, { "Content-Type": "text/html" });
res.end(data);
});
- Bu yöntem, büyük projelerde kod düzenini korur.
5. Routing (URL Yönetimi)
- Farklı URL’ler için farklı yanıtlar üretilir.
if (req.url === "/api") {
res.end("API endpoint");
} else {
res.writeHead(404);
res.end("Bulunamadı");
}
- Bu yapı, framework olmadan routing sağlar.
6. POST İsteklerini Okuma
- POST verileri parça parça gelir.
let body = "";
req.on("data", chunk => body += chunk);
req.on("end", () => {
const data = JSON.parse(body);
});
- Tüm veri gelmeden JSON parse edilmemelidir.
7. Static Dosya Sunma
- CSS, JS ve görseller için static yapı gerekir.
const path = require("path");
const filePath = path.resolve("public", "." + req.url);
- Bu kontrol, directory traversal saldırılarını engeller.
8. Hata Yönetimi
- Sunucu çökmemelidir.
res.writeHead(500);
res.end("Sunucu hatası");
- Kullanıcıya iç hata detayları gösterilmemelidir.
9. ES Module (import) Kullanımı
- Modern projelerde ES Module tercih edilir.
import http from "http";
ESM kullanımı için package.json içine "type": "module" eklenir.
Prodüksiyon İçin Öneriler
-
HTTP yerine Nginx + HTTPS kullanın
-
PM2 ile process yönetin
-
Static dosyaları cache’leyin
-
Büyük dosyalar için stream kullanın
Sıkça Sorulan Sorular (SSS)
1. HTTP modülü prodüksiyon için uygun mu? Evet. Microservice ve lightweight API’ler için idealdir.
2. Express yerine neden HTTP? Daha az bağımlılık ve tam kontrol sağlar.
3. Static dosya sunmak güvenli mi? Evet, doğru path kontrolü yapılırsa güvenlidir.
4. POST body neden parçalı gelir? Node.js stream tabanlı çalışır.
5. Hangi portu kullanmalıyım? 8000, 8080 veya 3000 yaygındır.
Sonuç
Bu rehberle Node.js HTTP modülü kullanarak frameworksüz, kontrollü ve yüksek performanslı sunucular oluşturabilirsiniz.
Canlı ortama geçerken, Rabisu Bulut altyapısında Node.js projelerinizi güvenle yayınlayabilirsiniz.