JavaScript  Kapsamlı Eğitim

5.1 Node.js & Express.js

5.1 Node.js & Express.js: JavaScript ile Sunucu Programlama

Node.js, JavaScript'i tarayıcı dışına (sunucu tarafına, masaüstü uygulamalarına vb.) taşıyan, Chrome V8 motoru üzerine kurulmuş bir çalışma zamanı ortamıdır. Express.js ise Node.js üzerinde çalışan, web uygulamaları ve API'ler geliştirmeyi kolaylaştıran minimal ve esnek bir web çatısıdır (Framework).

1. Node.js'in Gücü ve Mimarisi

  • Tek İş Parçacıklı ve Asenkron (Non-Blocking I/O): Tıpkı tarayıcı JS gibi, Node.js de Event Loop mimarisi üzerine kurulmuştur. Bu sayede, bir I/O (Input/Output - Dosya okuma, Veritabanı sorgulama) işlemi yapılırken beklemez, arka plana atar ve bu sırada diğer kullanıcı isteklerini işleyebilir. Bu, Node.js'i yüksek eşzamanlı (Concurrent) uygulamalar için çok verimli yapar.
  • Kullanım Alanları: Gerçek zamanlı uygulamalar (chat), Akış Uygulamaları (Streaming), Hızlı ve Ölçeklenebilir API'ler.
  • Temel Modüller: Node.js, dosya sistemi (`fs`), HTTP istekleri (`http`) ve yol (path) yönetimi gibi yerleşik modüllere sahiptir.

2. Express.js ile API Geliştirme

Express.js, Node.js'in karmaşık HTTP işlemlerini basitleştirir. Temel olarak Middleware ve Routing kavramlarına dayanır.

a. Routing (Yönlendirme):

Kullanıcıların hangi adrese (`/kullanicilar`, `/urunler/5`) hangi HTTP metoduyla (`GET`, `POST`, `PUT`, `DELETE`) istek yaptığına göre hangi fonksiyonun çalışacağını belirler.

const express = require('express'); const app = express(); // GET isteği: Tüm kullanıcıları listele app.get('/api/kullanicilar', (req, res) => { res.json([{ id: 1, ad: 'Ayşe' }]); }); // POST isteği: Yeni bir kullanıcı oluştur app.post('/api/kullanicilar', (req, res) => { // req.body'den veriyi alır ve veritabanına kaydeder res.status(201).send('Kullanıcı oluşturuldu'); }); app.listen(3000, () => console.log('Sunucu 3000 portunda çalışıyor.'));
b. Middleware (Ara Katman Yazılımı):

Bir istek (request) sunucuya ulaştığında, asıl işlevi yapacak fonksiyona gitmeden önce sırayla çalışan fonksiyonlardır. Tıpkı bir güvenlik kontrolü gibi, her istek önce bu aşamalardan geçer.

  • Amaçları: Kullanıcının giriş yapmış olup olmadığını kontrol etme (Auth), gelen isteğin JSON formatını ayrıştırma, loglama yapma.
  • Örnek: Gelen her isteği loglamak için: app.use((req, res, next) => { console.log(`[${new Date().toISOString()}] İstek geldi: ${req.method} ${req.url}`); next(); // Bir sonraki middleware veya route'a geç. });