CodeBlanks Logo Icon CodeBlanks

Özet - Middleware

app.use, Router ve error middleware'i birleştirerek bir logging sistemi yazarsın.

Özet: Günlükleme sistemi

Bu derste öğrendiklerimizi birleştirerek bir günlükleme sistemi kuracağız: global logger, router ve hata middleware'i birlikte.

Akış şöyle: app.use ile tüm istekleri günlükler; express.Router() ile /api altındaki rotaları gruplarız; hata middleware'i ile beklenmeyen durumları yakalarız. Bir istek geldiğinde önce logger çalışır, sonra router'daki rota. Hata oluşursa next(err) ile hata middleware'ine geçer. Bu, gerçek Express uygulamalarının iskeletidir: modüler routing + merkezi günlükleme + tutarlı hata işleme.

Parçaları birleştirme

Sistem üç parçadan oluşur. Birincisi global logger: app.use((req, res, next) => { console.log(req.method + " " + req.url); next(); });. İkincisi router: router.get("/items", handler) ve app.use("/api", router). Üçüncüsü hata middleware'i: app.use((err, req, res, next) => { ... }).

Bu üç parça birlikte çalışır. /api/items isteği geldiğinde: logger GET /api/items yazdırır, router /items rotasını bulur ve yanıt gönderir. /boom isteğinde: logger yazar, rota next(err) çağırır, hata middleware'i hatayı yakalar. Her parça ayrı bir sorumluluk taşır: günlükleme, routing, hata işleme. Bu ayrım, kodun bakımını kolaylaştırır.

Uygulama Günlükleme sistemini kur

const router = express.Router() tanımla. app.use ile logger ekle: console.log(req.method + " " + req.url); next();. router.get("/items", (req, res) => res.send("Öğeler")) ekle ve app.use("/api", router) ile bağla. app.get("/boom", (req, res, next) => next(new Error("Patladı"))) ekle. 4 parametreli hata middleware'i ekle: console.log("Hata: " + err.message); res.status(500).send("Hata"). Sunucu /api/items'e istek yapar.

Başlangıç kodu

index.js
const express = require("express");
const app = express();

// bir router nesnesi oluştur
// uygulamaya genel günlükleyici ekle (method + url)
// router'a /items rotası ekle, "Öğeler" gönder, /api altında bağla
// /boom rotası hata fırlatsın, dört parametreli hata işleyici ekle
// buraya yaz

const server = app.listen(3000, () => {
  const http = require("http");
  http.get("http://localhost:3000/api/items", (res) => {
    let body = "";
    res.on("data", (c) => body += c);
    res.on("end", () => { console.log("Yanıt: " + body); server.close(); });
  });
});

Örnek çözüm

index.js
const express = require("express");
const app = express();

const router = express.Router();
app.use((req, res, next) => {
  console.log(req.method + " " + req.url);
  next();
});
router.get("/items", (req, res) => res.send("Öğeler"));
app.use("/api", router);
app.get("/boom", (req, res, next) => next(new Error("Patladı")));
app.use((err, req, res, next) => {
  console.log("Hata: " + err.message);
  res.status(500).send("Hata");
});

const server = app.listen(3000, () => {
  const http = require("http");
  http.get("http://localhost:3000/api/items", (res) => {
    let body = "";
    res.on("data", (c) => body += c);
    res.on("end", () => { console.log("Yanıt: " + body); server.close(); });
  });
});

Beklenen çıktı

GET /api/items
Yanıt: Öğeler

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hangi middleware tüm istekleri günlükler?

index.js
app.use((req, res, next) => { console.log(req.url); next(); })
  • express.json()
  • router.get
  • app.use (logger) Doğru cevap
  • res.status(500)

Açıklama: app.use ile eklenen logger tüm isteklerde çalışır.

2 Parçayı rolüne eşle

Kavram Anlamı
app.use (logger) Tüm istekleri günlükler
express.Router() /api rotalarını gruplar
next(new Error()) Hata fırlatır
(err, req, res, next) Hata middleware imzası

Orta seviye bölümündeki tüm dersler