EMZETT.
Giriş yap

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), eval yok, 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