CodeBlanks Logo Icon CodeBlanks

Error middleware

Error-handling middleware yazmayı öğrenirsin.

Error middleware

Hata middleware'i dört parametre alır: (err, req, res, next). Express, dört parametreli bir fonksiyon görürse onu hata işleyici olarak tanır. Örnek: app.use((err, req, res, next) => { console.log(err.message); res.status(500).send("Hata"); });.

Hata middleware'ini tetiklemek için bir rotada next(new Error("mesaj")) çağrılır. Express hatayı yakalar ve dört parametreli middleware'e geçirir. Normal middleware (üç parametre) hataları işlemez; hata middleware'i son kaydedilen ve dört parametreli olandır. Bu desen, tüm hataları tek bir yerde tutarlı biçimde işlemeyi sağlar: rota yalnızca next(err) der, hata middleware'i yanıtı düzenler.

next(err) ile hata fırlatma

Bir rotada hata oluştuğunda next(err) çağrılır. Express, normal middleware zincirini atlar ve doğrudan hata middleware'ine geçer. Örnek: app.get("/boom", (req, res, next) => { next(new Error("Patladı")); });.

Hata nesnesinin message özelliği hatayı açıklar. Hata middleware'inde err.message ile bu açıklamaya erişilir. Bu desen, rota içine try/catch yazmak yerine hatayı merkezi olarak işlemeyi sağlar. Birden fazla hata middleware'i de tanımlanabilir; bunlar next(err) ile zincirlenir. Bu, farklı hata türlerini farklı işleyicilerle yönetmeyi mümkün kılar.

Uygulama Hata middleware ekle

app.get("/boom", (req, res, next) => { next(new Error("Patladı")); }) rotası ekle. app.use((err, req, res, next) => { console.log("Hata: " + err.message); res.status(500).send("Sunucu hatası"); }) hata middleware'i ekle. Sunucu kendiliğinden kapanır.

Başlangıç kodu

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

// /boom rotası: hata fırlatarak sıradakine geç
// dört parametreli hata işleyici: iletiyi yazdır, 500 ile yanıt ver
// buraya yaz

const server = app.listen(3000, () => {
  const http = require("http");
  http.get("http://localhost:3000/boom", (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();

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("Sunucu hatası");
});

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

Beklenen çıktı

Hata: Patladı
Yanıt: Sunucu hatası

Soru ve cevaplar

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

1 Hata middleware'i kaç parametre alır?

index.js
app.use((err, req, res, next) => { ... })
  • Dört Doğru cevap
  • İki
  • Üç
  • Beş

Açıklama: Dört parametre: err, req, res, next.

2 Parçayı rolüne eşle

Kavram Anlamı
next(new Error()) Hata fırlatır
err.message Hata açıklaması
(err, req, res, next) Hata middleware imzası
res.status(500) Hata durumu gönderir

3 hata middleware imzasını tamamla

Soru
app.use((err, req, res, ____) => { console.log(err.message); res.status(500).send("Hata"); });
Cevap
app.use((err, req, res, next) => { console.log(err.message); res.status(500).send("Hata"); });

Açıklama: Dördüncü parametre next'tir.

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