Node.js
Ö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.
Örnek çözümü göster
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(); });
});
});
Kendini test et
-
Hangi middleware tüm istekleri günlükler?
app.use((req, res, next) => { console.log(req.url); next(); })
- express.json()
- router.get
- app.use (logger)
- res.status(500)
Cevabı göster
app.use (logger) — app.use ile eklenen logger tüm isteklerde çalışır.
-
Parçayı rolüne eşle
- 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ı
Sıradaki ders: Rota parametreleri