Node.js İle Express Çatısını Kullanarak Basit Bir Web Sunucusu Nasıl Yapılır?

Node.js İle Express Çatısını Kullanarak Basit Bir Web Sunucusu Nasıl Yapılır?
Node.js İle Express Çatısını Kullanarak Basit Bir Web Sunucusu Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Projenize başlamadan önce bilgisayarınızda Node.js ve npm (Node Package Manager) yüklü olmalıdır. Node.js, JavaScript kodlarını tarayıcı dışında çalıştırmanızı sağlayan bir ortamdır. npm ise projeniz için gerekli olan kütüphaneleri yönetmenizi sağlayan bir araçtır.

Kurulumu doğrulamak için terminal veya komut satırını açarak şu komutları çalıştırabilirsiniz:

node -v
npm -v

Bu komutlar, sisteminizde yüklü olan Node.js ve npm sürümlerini döndürecektir. Eğer bir sürüm numarası görmüyorsanız, resmi Node.js web sitesinden güncel LTS (Long Term Support) sürümünü indirmeniz önerilir. Ayrıca bir kod editörü olarak Visual Studio Code kullanmanız, hata ayıklama ve dosya yönetimi süreçlerinizi kolaylaştıracaktır.

Adım Adım Proje Kurulumu

Bir web sunucusu oluşturmanın ilk adımı, projeniz için bir klasör oluşturmak ve gerekli yapılandırma dosyalarını hazırlamaktır. Terminalde projenizin yer alacağı dizine gidin ve aşağıdaki komutları uygulayın.

mkdir basit-web-sunucusu
cd basit-web-sunucusu
npm init -y

npm init -y komutu, projeniz için varsayılan ayarlara sahip bir package.json dosyası oluşturur. Bu dosya, projenizin bağımlılıklarını ve meta verilerini tutar. Ardından Express kütüphanesini projenize dahil etmelisiniz.

npm install express

Bu komut, node_modules klasörünü ve Express kütüphanesini projenize ekler. Artık sunucumuzu kodlamaya hazırız.

Express ile İlk Web Sunucusunu Oluşturma

Proje dizininizde app.js adında bir dosya oluşturun. Bu dosya, sunucumuzun giriş noktası olacaktır. Basit bir "Merhaba Dünya" yanıtı döndüren sunucu kodumuz şu şekildedir:

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Merhaba! Node.js ve Express ile sunucum çalışıyor.');
});

app.listen(port, () => {
  console.log(`Sunucu http://localhost:${port} adresinde çalışıyor.`);
});

Bu kodda, Express modülünü içe aktardık, bir uygulama örneği oluşturduk ve app.get ile kök dizine gelen istekleri dinlemeye başladık. app.listen fonksiyonu ise sunucunun belirttiğimiz port üzerinden gelen bağlantıları kabul etmesini sağlar.

Sunucuyu Çalıştırma ve Test Etme

Kodunuzu yazdıktan sonra terminale dönerek sunucuyu başlatın. Node.js ortamında bir dosyayı çalıştırmak için node komutunu kullanırız.

node app.js

Terminalde "Sunucu http://localhost:3000 adresinde çalışıyor." mesajını gördüyseniz, tarayıcınızı açıp http://localhost:3000 adresine gidin. Ekranda "Merhaba! Node.js ve Express ile sunucum çalışıyor." metnini görmelisiniz. Bu, sunucunuzun başarıyla çalıştığının kanıtıdır.

Farklı HTTP Metodları ve Rotalar

Web sunucuları sadece veri göstermekle kalmaz, aynı zamanda veri alabilir veya güncelleyebilir. Express, HTTP metodlarını (GET, POST, PUT, DELETE) kolayca yönetmenizi sağlar. Aşağıdaki örnekte, bir kullanıcı verisi gönderildiğinde nasıl yanıt verileceğini görebilirsiniz.

app.use(express.json());

app.post('/kullanici', (req, res) => {
  const { isim } = req.body;
  res.status(201).json({ mesaj: `Kullanıcı ${isim} başarıyla oluşturuldu.` });
});

Burada express.json() ara katmanı (middleware), gelen istek gövdesindeki JSON verisini ayrıştırmamızı sağlar. app.post rotası ise sunucuya veri gönderildiğinde çalışır.

Metod Kullanım Amacı Güvenlik Seviyesi
GET Veri okuma/listeleme Düşük (URL'de veri görünür)
POST Yeni veri oluşturma Orta (Body ile gönderilir)
PUT Veri güncelleme Orta
DELETE Veri silme Yüksek (Yetkilendirme gerekir)

Kritik Güvenlik Uyarısı: Üretim ortamında (production) sunucunuzu çalıştırırken asla hata mesajlarını doğrudan istemciye (client) göndermeyin. Kullanıcı girdilerini her zaman doğrulayın ve SQL Injection veya XSS gibi saldırılara karşı express-validator veya benzeri kütüphaneler kullanarak verileri temizleyin.

Sıkça Sorulan Sorular

Node.js ve Express arasındaki fark nedir?

Node.js, JavaScript'i sunucu tarafında çalıştıran bir çalışma zamanıdır. Express ise bu çalışma zamanı üzerinde çalışan, web uygulamaları oluşturmayı kolaylaştıran bir çatıdır.

Neden `nodemon` kullanmalıyım?

nodemon, kodunuzda yaptığınız her değişiklikte sunucuyu otomatik olarak yeniden başlatır. Geliştirme sürecinde büyük zaman kazandırır.

Üretim ortamı için hangi sunucu kullanılmalı?

Sadece node app.js komutu yeterli değildir. Süreç yönetimi için PM2 kullanmalı ve sunucunuzun önüne bir Nginx gibi ters vekil sunucu (reverse proxy) koymalısınız.

Express'te hata yönetimi nasıl yapılır?

Express'te hata yönetimi, dört parametre alan (err, req, res, next) özel bir ara katman fonksiyonu ile yapılır.

JSON verisi nasıl gönderilir?

İstemci tarafında (örneğin Fetch API ile), Content-Type: application/json başlığı ile bir POST isteği yaparak JSON verisi gönderebilirsiniz.

Sorumluluk Reddi: Bu rehberdeki kodlar eğitim amaçlıdır. Canlıya alacağınız projelerde güvenlik açıklarını kapatmak için kapsamlı bir güvenlik denetimi yapmanız ve güncel güvenlik kütüphanelerini kullanmanız gerekmektedir.

Express Uygulamalarında Performans Optimizasyonu

Web sunucunuzun trafiği arttıkça, Express uygulamanızın yanıt sürelerini optimize etmek kritik bir hale gelir. Performans, sadece kodun hızı değil, aynı zamanda sunucunun kaynakları nasıl yönettiği ile ilgilidir.

Gzip Sıkıştırma Kullanımı

Sunucudan istemciye gönderilen verilerin boyutunu küçültmek, bant genişliği kullanımını azaltır ve sayfa yükleme sürelerini ciddi oranda düşürür. Express'te bu işlem için compression kütüphanesini kullanabilirsiniz.

const compression = require('compression');
const express = require('express');
const app = express();

// Tüm yanıtları sıkıştır
app.use(compression());

app.get('/', (req, res) => {
  res.send('Bu içerik sıkıştırılarak gönderilir.');
});

Statik Dosyaların Sunumu

Express'in yerleşik express.static fonksiyonu, statik dosyaları (CSS, JS, resimler) sunmak için optimize edilmiştir. Ancak, bu dosyaları doğrudan Node.js üzerinden sunmak yerine, Nginx veya Apache gibi bir ters vekil sunucu (reverse proxy) kullanmak performansı artıracaktır.

Express Uygulamasını Yayına Alma (Deployment)

Uygulamanızı yerel geliştirme ortamından canlı sunucuya taşırken dikkat etmeniz gereken bazı temel yapılandırmalar bulunmaktadır. Node.js uygulamaları, varsayılan olarak tek bir işlemci çekirdeğini kullanır. Uygulamanızın tüm çekirdeklerden faydalanmasını sağlamak için PM2 gibi bir süreç yöneticisi kullanmalısınız.

PM2 ile Süreç Yönetimi

PM2, uygulamanızın çökmesi durumunda otomatik olarak yeniden başlatılmasını sağlar ve "cluster" modu ile performansı maksimize eder.

  1. Kurulum: npm install pm2 -g
  2. Başlatma: pm2 start app.js -i max

-i max parametresi, sunucunuzdaki tüm CPU çekirdeklerini kullanarak uygulamanızın yük dengelemesini (load balancing) otomatik yapmasını sağlar.

Ortam Değişkenlerini Yönetme

Canlı ortamda veritabanı şifreleri veya API anahtarları gibi hassas verileri kod içerisinde tutmamalısınız. Bunun yerine dotenv paketini kullanarak bu bilgileri .env dosyasında saklayın.

// .env dosyası
PORT=3000
DB_URL=mongodb://kullanici:sifre@localhost:27017/db

// app.js dosyası
require('dotenv').config();
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Sunucu ${port} portunda çalışıyor.`));

İleri Seviye Hata Ayıklama (Debugging)

Uygulamanızda karmaşık hatalarla karşılaştığınızda, console.log kullanmak yerine profesyonel hata ayıklama araçlarını tercih etmelisiniz. Node.js'in dahili hata ayıklayıcısı veya debug paketi, uygulamanızın akışını takip etmenizi kolaylaştırır.

  • Debug Paketi: Uygulamanızın farklı modüllerinden gelen logları kategorize etmenize olanak tanır.
  • Chrome DevTools: node --inspect app.js komutu ile uygulamanızı başlatarak, tarayıcınızın geliştirici araçları üzerinden kodunuzu satır satır inceleyebilirsiniz.

Sonuç

Node.js ile Express çatısını kullanarak basit bir web sunucusu oluşturmak, backend geliştirme dünyasına atılan en sağlam adımdır. Bu rehberde, projenin kurulumundan temel HTTP metodlarının kullanımına kadar olan süreci adım adım inceledik. Express'in sunduğu basitlik ve esneklik, projelerinizi hızla büyütmenize olanak tanır.

Bir sonraki adım olarak, veritabanı bağlantılarını (MongoDB veya PostgreSQL gibi) öğrenerek dinamik içerik sunan uygulamalar geliştirmeye başlayabilirsiniz. Ayrıca, Express'in sunduğu "Middleware" yapısını daha derinlemesine inceleyerek kimlik doğrulama (authentication) süreçlerini projenize entegre etmenizi öneririm.

Bu yazıya tepkinizi paylaşın:
Emre Çelik

Verimlilik ve zaman yönetimi üzerine odaklanan bir yazarım. Günlük hayatı optimize eden ipuçları ve iş akışı optimizasyonu konularında içerikler üretiyorum.

Yorumlar (0)

Yorum Yaz