Yükleniyor...

Express.js Rehberi: Modern Web Uygulamaları ve API Geliştirme

Yazar: Burak Balkı | Kategori: Database | Okuma Süresi: 9 dk

Express.js dünyasına kapsamlı bir giriş yapın. Bu rehber, Node.js tabanlı bu popüler framework'ün kurulumunu, routing mekanizmalarını, middleware yapısını ve...

## Express.js Nedir ve Neden Tercih Edilmelidir? **Express.js**, Node.js platformu üzerine inşa edilmiş, minimal ve esnek bir web uygulama çatısıdır (framework). Modern web geliştirme ekosisteminde, sunucu tarafı uygulamaları ve **RESTful API**'ler oluşturmak için endüstri standardı olarak kabul edilir. Express, Node.js'in karmaşık HTTP modülünü soyutlayarak, geliştiricilere daha temiz, okunabilir ve sürdürülebilir bir kod yapısı sunar. Express.js'in tercih edilme nedenlerinin başında **performans** ve **modülerlik** gelir. Minimalist yapısı sayesinde uygulamaya sadece ihtiyaç duyulan özellikler eklenir, bu da gereksiz yükten kaçınmayı sağlar. Ayrıca, devasa bir ekosisteme (middleware) sahip olması, veritabanı entegrasyonundan güvenlik protokollerine kadar her türlü ihtiyacın hızlıca çözülmesine olanak tanır. ## Express.js Kurulumu ve Proje Yapılandırması Bir Express.js projesine başlamak için sisteminizde Node.js ve npm'in (Node Package Manager) kurulu olması gerekir. Proje klasörünüzü oluşturduktan sonra aşağıdaki adımları izleyerek temel yapılandırmayı gerçekleştirebilirsiniz. ```bash # Proje dizini oluşturma ve giriş mkdir express-rehberi && cd express-rehberi # package.json oluşturma npm init -y # Express kurulumu npm install express ``` Projenin ana giriş dosyası olan `app.js` veya `index.js` dosyasını oluşturarak en temel sunucuyu ayağa kaldırabiliriz: ```javascript const express = require('express'); const app = express(); const PORT = 3000; app.get('/', (req, res) => { res.send('Express.js Sunucusu Çalışıyor!'); }); app.listen(PORT, () => { console.log(`Sunucu http://localhost:${PORT} adresinde aktif.`); }); ``` ## Temel Yönlendirme (Routing) Mekanizmaları **Routing**, bir uygulamanın uç noktalarının (URI) istemci isteklerine (GET, POST, PUT, DELETE) nasıl yanıt vereceğini belirleme sürecidir. Express, bu süreci oldukça sezgisel bir hale getirir. ### HTTP Metotları ve Kullanımı ```javascript // GET İsteği: Veri okuma app.get('/api/users', (req, res) => { res.json({ message: "Kullanıcı listesi getirildi." }); }); // POST İsteği: Yeni veri oluşturma app.post('/api/users', (req, res) => { res.status(201).json({ message: "Kullanıcı oluşturuldu." }); }); // PUT İsteği: Mevcut veriyi güncelleme app.put('/api/users/:id', (req, res) => { const { id } = req.params; res.json({ message: `${id} ID'li kullanıcı güncellendi.` }); }); // DELETE İsteği: Veri silme app.delete('/api/users/:id', (req, res) => { res.json({ message: "Kullanıcı silindi." }); }); ``` ## Middleware (Ara Yazılım) Kavramı ve Kullanımı **Middleware**, istek (request) ve yanıt (response) döngüsü arasında çalışan fonksiyonlardır. Express'in kalbi middleware yapısıdır. Bir middleware fonksiyonu; isteği değiştirebilir, yanıtı sonlandırabilir veya döngüyü bir sonraki fonksiyona (`next()`) aktarabilir. ### Özel Bir Middleware Oluşturma ```javascript const loggerMiddleware = (req, res, next) => { console.log(`${new Date().toISOString()} - ${req.method} : ${req.url}`); next(); // Bir sonraki middleware'e geçişi sağlar }; app.use(loggerMiddleware); ``` ### Built-in ve Third-party Middleware Express ile gelen `express.json()` gömülü bir middleware iken, `cors` veya `helmet` gibi paketler dış kaynaklı (third-party) middleware örnekleridir. ```javascript app.use(express.json()); // JSON gövdelerini ayrıştırmak için app.use(express.static('public')); // Statik dosyaları sunmak için ``` ## Express.js ile Veritabanı Entegrasyonu Express.js, veritabanı bağımsızdır; yani hem SQL (PostgreSQL, MySQL) hem de NoSQL (MongoDB, Redis) veritabanları ile mükemmel uyum sağlar. ### MongoDB ve Mongoose Kullanımı ```javascript const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/express_db', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('MongoDB bağlantısı başarılı')) .catch(err => console.error('Bağlantı hatası:', err)); ``` ### PostgreSQL ve Sequelize Kullanımı ```javascript const { Sequelize } = require('sequelize'); const sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', dialect: 'postgres' }); async function testDB() { try { await sequelize.authenticate(); console.log('PostgreSQL bağlantısı kuruldu.'); } catch (error) { console.error('Bağlantı başarısız:', error); } } ``` ## Hata Yönetimi ve Debugging Stratejileri Profesyonel bir Express uygulamasında hatalar merkezi bir noktadan yönetilmelidir. Express, dört parametreli özel hata yakalama middleware'lerini tanır. ```javascript // Merkezi hata yakalayıcı app.use((err, req, res, next) => { console.error(err.stack); res.status(500).json({ status: 'error', message: err.message || 'Bir iç sunucu hatası oluştu.' }); }); ``` ## Güvenlik ve Kimlik Doğrulama (Authentication) Web uygulamalarında güvenlik en kritik unsurdur. Express.js projelerinde **JWT (JSON Web Token)** kullanımı oldukça yaygındır. ```javascript const jwt = require('jsonwebtoken'); const authMiddleware = (req, res, next) => { const token = req.header('Authorization'); if (!token) return res.status(401).send('Erişim engellendi.'); try { const verified = jwt.verify(token, process.env.TOKEN_SECRET); req.user = verified; next(); } catch (err) { res.status(400).send('Geçersiz Token'); } }; ``` > **Önemli Not:** Uygulamanızı yayına almadan önce `helmet` paketini kullanarak HTTP başlıklarını güvenli hale getirmeyi unutmayın. ## Performans Optimizasyonu ve Ölçeklenebilirlik Express uygulamalarınızın yüksek trafik altında stabil kalması için şu teknikleri uygulayabilirsiniz: | Teknik | Açıklama | Araç | | :--- | :--- | :--- | | **Gzip Sıkıştırma** | Yanıt boyutlarını küçültür. | `compression` | | **Caching** | Sık erişilen verileri bellekte tutar. | `Redis` | | **Load Balancing** | Yükü birden fazla işleme dağıtır. | `PM2 Cluster Mode` | | **Rate Limiting** | Kötü niyetli istekleri sınırlar. | `express-rate-limit` | ## MVC Mimarisi ve Kod Organizasyonu Büyük projelerde spagetti koddan kaçınmak için **MVC (Model-View-Controller)** yapısı kullanılmalıdır. - **Models:** Veri yapısı ve veritabanı şemaları. - **Views:** Kullanıcı arayüzü (API projelerinde genelde JSON yanıtları). - **Controllers:** İş mantığının (business logic) bulunduğu yer. - **Routes:** URL yönlendirmelerinin tanımlandığı yer. ```javascript // routes/userRoutes.js const express = require('express'); const router = express.Router(); const userController = require('../controllers/userController'); router.get('/', userController.getAllUsers); module.exports = router; ``` ## Sık Yapılan Hatalar 1. **Next() Fonksiyonunu Unutmak:** Middleware zincirinde `next()` çağrılmazsa istek askıda kalır. 2. **Hata Yakalamama:** Async/Await bloklarında `try-catch` kullanmamak uygulamanın çökmesine neden olur. 3. **Güvenlik İhmali:** `.env` dosyalarını git'e pushlamak ve hassas verileri açıkta bırakmak. 4. **Bloklayıcı İşlemler:** Node.js tek iş parçacıklı (single-threaded) olduğu için CPU yoğunluklu işlemleri ana döngüde yapmak performansı öldürür. ## Sık Sorulan Sorular 1. **Express.js öğrenmek için Node.js bilmek şart mı?** Evet, Express bir Node.js çatısı olduğu için temel Node.js kavramlarına ve JavaScript asenkron yapısına hakim olmanız gerekir. 2. **Express.js ile hangi veritabanı daha iyidir?** Bu projenin ihtiyacına bağlıdır. Hızlı prototipleme için MongoDB, ilişkisel ve karmaşık veriler için PostgreSQL önerilir. 3. **Body-parser kullanmam gerekiyor mu?** Express 4.16.0 sürümünden itibaren `express.json()` ve `express.urlencoded()` gömülü olarak geldiği için harici body-parser paketine gerek kalmamıştır. 4. **Express.js büyük ölçekli projeler için uygun mu?** Evet, doğru mimari (Microservices veya iyi yapılandırılmış Monolith) ve PM2 gibi araçlarla çok büyük yükleri kaldırabilir. 5. **NestJS mi Express mi?** Express daha esnek ve minimaldir. NestJS ise daha kuralcı, TypeScript tabanlı ve kurumsal mimari odaklıdır. ## Özet ve Sonuç Express.js, hızı, esnekliği ve geniş topluluk desteği ile modern web dünyasının vazgeçilmez bir parçasıdır. Bu rehberde temel kurulumdan veritabanı entegrasyonuna, güvenlikten performans optimizasyonuna kadar kritik noktaları ele aldık. Doğru middleware kullanımı ve MVC yapısıyla birleştiğinde, Express ile ölçeklenebilir ve yüksek performanslı uygulamalar geliştirmek oldukça verimlidir.