Express ve Node: JavaScript ile web sunucuları ve API’ler
Kısaca: Express, Node.js için yalın bir web çerçevesidir: rotalar HTTP isteklerine yanıt verir, ara yazılımlar istekleri adım adım işler (günlükleme, JSON, kimlik doğrulama, hatalar).
Biraz daha ayrıntılı: Node.js ile JavaScript sunucuda çalışır. Express (2010’dan beri) API’ler ve web sayfaları için klasiktir; modern alternatifler: Fastify, Hono, NestJS, Next.js rota işleyicileri.
Ayrıntılı
İlk API
import express from 'express';
const app = express();
app.use(express.json()); // JSON gövdesini oku
const games = [{ id: 1, title: 'Zelda' }];
app.get('/api/games', (req, res) => res.json(games));
app.get('/api/games/:id', (req, res) => {
const g = games.find(x => x.id === Number(req.params.id));
if (!g) return res.status(404).json({ error: 'not found' });
res.json(g);
});
app.post('/api/games', (req, res) => {
const { title } = req.body;
if (typeof title !== 'string' || !title.trim()) return res.status(400).json({ error: 'title missing' });
const created = { id: games.length + 1, title: title.trim() };
games.push(created);
res.status(201).json(created);
});
app.listen(3000, () => console.log('running on :3000'));Başlat: node server.js (package.json’da "type": "module"). Express 5, otomatik hata iletimiyle asenkron işleyicileri destekler.
Ara yazılım ve hatalar
Ara yazılımlar bir zincirde (req, res, next) işlevleridir: sıra önemlidir.
app.use((req, res, next) => { console.log(req.method, req.url); next(); });
app.use('/api', authCheck); // yalnızca /api için
app.use((err, req, res, next) => { // hata ara yazılımı (4 parametre)
console.error(err);
res.status(500).json({ error: 'Server error' });
});Denenmiş paketler: helmet (güvenlik başlıkları), cors, express-rate-limit, morgan/pino (günlükleme), zod (doğrulama), cookie-parser/express-session, multer (yüklemeler).
Yapı ve veri tabanı
- Kaynak başına Router (
express.Router()), denetleyici/servis/depo ayrımı. - Veri tabanı:
pg/Drizzle/Prisma/Sequelize; parametreli sorgular. - Yapılandırma:
process.env(dotenv), asla kodda sır yok. - Async/await + merkezî hata işleme; promise’leri ele alınmamış bırakma.
- Testler:
supertest+ Jest/Vitest/node:test. - İşletim:
NODE_ENV=production, süreç yöneticisi (pm2) veya Docker, ters proxy (Nginx) + HTTPS, sağlık kontrolü, günlükler. - Zarif kapanış (SIGTERM).
Güvenlik ve sınıflandırma
- Girdileri doğrula (tür, uzunluk),
evalyok, NoSQL/SQL enjeksiyonu, XSS (ham HTML çıktısı verme), çerez kimlik doğrulamasında CSRF, CORS’u bilinçli ayarla, hız sınırlama, bağımlılıkları denetle (npm audit). - Gövde boyutunu sınırla (
express.json({ limit: '100kb' })). - İstemcilere yığın izli hataları gönderme.
- Karşılaştırma: Express = asgari/çok özgürlük; Fastify daha hızlı + şemalar; NestJS yapılandırılmış (TypeScript, DI, Angular tarzı); Next.js ön yüz + API’yi birleştirir.
- Öğrenme yolu: Node temelleri → HTTP/REST → Express → veri tabanı → kimlik doğrulama → testler → dağıtım.
Ayrıca bak: Node.js, REST API tasarımı, Hız sınırlama