Özet - Middleware
- Node.js kursu
- Orta seviye
- Ders 35/116
- 5 dk
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
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
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?
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ı |