Türkiye'de ilk Mobil & PC Aynı Anda Metin2 Oyna. Triarchonline kalıcı ve uzun ömürlü yapısı ile 24 Temmuz'da açılıyor. | 1-99 Mobil Metin2 Triarch HEMEN TIKLA!
[NODE JS] Express.js Kurulumu ve İlk Uygulama
Express.js, Node.js dünyasının en popüler web framework'ü. Minimalist yapısıyla hızlı bir şekilde web sunucu ve API oluşturmanızı sağlar. Saf Node.js ile HTTP sunucu kurmak mümkün ama route yönetimi, middleware sistemi, template engine desteği gibi işleri elle yapmak çok zahmetli. Express tüm bu işleri sizin için halleder ve siz asıl iş mantığınıza odaklanırsınız.
İlk Express uygulamamı yazarken ne kadar az kodla ne kadar çok iş yapabildiğime şaşırmıştım. Saf Node.js ile 50-60 satır yazdığım bir sunucuyu Express ile 10 satırda kuruvermiştim. O günden beri neredeyse her projemde Express kullanıyorum. Tabii ki Fastify, Koa, Hapi gibi alternatifler de var ama Express'in ekosistemi ve topluluk desteği rakipsiz.
Express'i kurabilmek için öncelikle bir Node.js projesine ihtiyacınız var. Yeni bir klasör oluşturup npm init komutuyla package.json dosyasını yaratıyorsunuz. Sonra npm install express komutuyla Express'i projenize ekliyorsunuz. Bu kadar basit, herhangi bir global kurulum gerekmiyor.
package.json dosyasında "type": "module" eklerseniz ES module syntax kullanabilirsiniz. Yani import/export yerine require/module.exports kullanmak zorunda kalmazsınız. Ama bu yazıda daha yaygın olan CommonJS syntax'ını kullanacağım çünkü çoğu tutorial ve mevcut proje bu syntax'ı kullanıyor.
Express uygulaması oluşturmak için express() fonksiyonunu çağırıyorsunuz. Bu size bir app objesi döner ve tüm işlerinizi bu obje üzerinden yaparsınız. Route tanımlama, middleware ekleme, sunucuyu başlatma gibi her şey app üzerinden gerçekleşir.
Route tanımlarken HTTP metoduna göre farklı metotlar kullanırsınız: app.get(), app.post(), app.put(), app.delete() gibi. Her route bir path ve callback fonksiyonu alır. Callback fonksiyonu req (request) ve res (response) parametreleri alır. Saf Node.js'ten farklı olarak Express bu objelere birçok kullanışlı metod ekler.
res.send() metodu otomatik olarak Content-Type header'ını ayarlar. String verirseniz text/html, obje verirseniz application/json olarak set eder. res.json() metodu ise her zaman JSON döner. res.status() ile HTTP status code'unu ayarlarsınız. Bunları zincirleme kullanabilirsiniz: res.status(201).json(data) gibi.
Express'in güzel yanlarından biri de geliştirme sürecini hızlandıran araçlarla uyumlu çalışması. nodemon paketi dosya değişikliklerini izleyip sunucuyu otomatik yeniden başlatır. Bu sayede her değişiklikte elle sunucuyu durdurup başlatmanıza gerek kalmaz. Geliştirme ortamında nodemon kullanmanızı şiddetle tavsiye ederim.
Express'in app.listen() metodu aslında Node.js'in http.createServer() metodunun üzerine bir sarmalama yapar. Yani Express aslında saf Node.js HTTP modülünü kullanıyor. Eğer HTTPS sunucu kurmak istiyorsanız https.createServer(sslOptions, app) şeklinde Express app'ini doğrudan Node.js HTTPS modülüne verebilirsiniz.
Proje yapısı konusunda da birkaç şey söyleyeyim. Küçük projelerde tek dosyada her şeyi yazmak sorun değil ama proje büyüdükçe dosyaları düzenlemeniz gerekir. Routes, controllers, middleware, models gibi klasörlere ayırmak yaygın bir pratik. Bu konuyu ileriki yazılarda detaylı ele alacağız.
JavaScript:
// Express.js kurulumu ve ilk uygulama
// Terminal komutlari:
// mkdir express-app && cd express-app
// npm init -y
// npm install express
// npm install --save-dev nodemon
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
// JSON body parsing middleware
app.use(express.json());
// URL-encoded form verisi parsing
app.use(express.urlencoded({{ extended: true }}));
// Basit bir istek loglama middleware'i
app.use((req, res, next) => {{
const timestamp = new Date().toISOString();
console.log(`[${{timestamp}}] ${{req.method}} ${{req.url}}`);
next();
}});
// Ana sayfa
app.get('/', (req, res) => {{
res.send(`
<h1>Express.js Uygulamasi</h1>
<p>Hosgeldiniz! Ilk Express uygulamaniz calisiyor.</p>
<ul>
<li><a href="/api/merhaba">Merhaba Endpoint</a></li>
<li><a href="/api/bilgi">Sunucu Bilgisi</a></li>
<li><a href="/api/urunler">Urunler</a></li>
</ul>
`);
}});
// Basit JSON response
app.get('/api/merhaba', (req, res) => {{
res.json({{
mesaj: 'Merhaba Dunya!',
tarih: new Date().toLocaleDateString('tr-TR'),
framework: 'Express.js',
}});
}});
// Sunucu bilgisi
app.get('/api/bilgi', (req, res) => {{
res.json({{
nodeVersiyon: process.version,
platform: process.platform,
uptime: Math.floor(process.uptime()) + ' saniye',
bellek: {{
toplam: Math.round(process.memoryUsage().heapTotal / 1024 / 1024) + ' MB',
kullanilan: Math.round(process.memoryUsage().heapUsed / 1024 / 1024) + ' MB',
}},
}});
}});
// Basit bir urun listesi API'si
const urunler = [
{{ id: 1, ad: 'Laptop', fiyat: 25000, stok: 15 }},
{{ id: 2, ad: 'Telefon', fiyat: 18000, stok: 30 }},
{{ id: 3, ad: 'Tablet', fiyat: 12000, stok: 8 }},
{{ id: 4, ad: 'Kulaklik', fiyat: 3500, stok: 50 }},
{{ id: 5, ad: 'Mouse', fiyat: 800, stok: 100 }},
];
// Tum urunleri getir
app.get('/api/urunler', (req, res) => {{
res.json({{
toplam: urunler.length,
urunler: urunler,
}});
}});
// ID ile urun getir
app.get('/api/urunler/:id', (req, res) => {{
const id = parseInt(req.params.id);
const urun = urunler.find(u => u.id === id);
if (!urun) {{
return res.status(404).json({{ hata: 'Urun bulunamadi' }});
}}
res.json(urun);
}});
// Yeni urun ekle
app.post('/api/urunler', (req, res) => {{
const {{ ad, fiyat, stok }} = req.body;
if (!ad || !fiyat) {{
return res.status(400).json({{ hata: 'Ad ve fiyat zorunludur' }});
}}
const yeniUrun = {{
id: urunler.length + 1,
ad,
fiyat: Number(fiyat),
stok: Number(stok) || 0,
}};
urunler.push(yeniUrun);
res.status(201).json(yeniUrun);
}});
// 404 handler - tum route'lardan sonra
app.use((req, res) => {{
res.status(404).json({{ hata: 'Sayfa bulunamadi' }});
}});
// Sunucuyu baslat
app.listen(PORT, () => {{
console.log(`Express sunucusu http://localhost:${{PORT}} adresinde calisiyor`);
console.log('Durdurmak icin Ctrl+C basiniz');
}});
package.json dosyanıza start ve dev scriptlerini eklemeyi unutmayın. Geliştirme ortamında nodemon ile çalışmak hayatınızı kolaylaştırır.
JavaScript:
// package.json icin script ayarlari:
// "scripts": {{
// "start": "node app.js",
// "dev": "nodemon app.js"
// }}
// Ortam degiskenlerine gore yapilandirma
const express = require('express');
const app = express();
// Ortam degiskenleri
const config = {{
port: process.env.PORT || 3000,
nodeEnv: process.env.NODE_ENV || 'development',
apiPrefix: '/api/v1',
}};
// Gelistirme ortaminda detayli loglama
if (config.nodeEnv === 'development') {{
app.use((req, res, next) => {{
console.log(`\n--- Yeni Istek ---`);
console.log(`Zaman: ${{new Date().toISOString()}}`);
console.log(`Metod: ${{req.method}}`);
console.log(`URL: ${{req.url}}`);
console.log(`Headers:`, JSON.stringify(req.headers, null, 2));
console.log(`Query:`, req.query);
console.log(`Body:`, req.body);
console.log(`-----------------\n`);
next();
}});
}}
app.use(express.json());
// Saglik kontrolu endpoint'i
app.get(`${{config.apiPrefix}}/health`, (req, res) => {{
res.json({{
status: 'healthy',
environment: config.nodeEnv,
timestamp: new Date().toISOString(),
version: require('./package.json').version || '1.0.0',
}});
}});
// API versiyonlama ornegi
app.get(`${{config.apiPrefix}}/info`, (req, res) => {{
res.json({{
api: 'Express Egitim API',
version: 'v1',
endpoints: [
'GET /api/v1/health',
'GET /api/v1/info',
],
}});
}});
// Graceful shutdown
process.on('SIGTERM', () => {{
console.log('SIGTERM sinyali alindi. Sunucu kapatiliyor...');
process.exit(0);
}});
process.on('SIGINT', () => {{
console.log('\nSunucu kapatiliyor...');
process.exit(0);
}});
app.listen(config.port, () => {{
console.log(`Ortam: ${{config.nodeEnv}}`);
console.log(`Sunucu: http://localhost:${{config.port}}`);
console.log(`API: http://localhost:${{config.port}}${{config.apiPrefix}}`);
}});
Express'i kurup ilk uygulamanızı çalıştırdığınızda artık Node.js ile web geliştirme yolculuğunuz gerçek anlamda başlamış oluyor. Sonraki yazılarda route'ları, middleware'leri ve template engine'leri detaylı olarak inceleyeceğiz.
Emeğiniz ve katkınız için teşekkür ederiz!
Konunuz gerekli incelemelerden geçerek onaylandı. Topluluğumuza katkılarınızın devamını bekliyoruz.
İyi forumlar!
Konunuz gerekli incelemelerden geçerek onaylandı. Topluluğumuza katkılarınızın devamını bekliyoruz.
İyi forumlar!

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 3
- Görüntüleme
- 100
- Cevaplar
- 9
- Görüntüleme
- 473
Altın Konu
Next.js'de API Oluşturma Ve Kullanma
- Cevaplar
- 12
- Görüntüleme
- 1K
- Cevaplar
- 2
- Görüntüleme
- 613
