Error middleware
- Node.js kursu
- Orta seviye
- Ders 33/116
- 5 dk
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
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
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?
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
app.use((err, req, res, ____) => { console.log(err.message); res.status(500).send("Hata"); });
app.use((err, req, res, next) => { console.log(err.message); res.status(500).send("Hata"); });
Açıklama: Dördüncü parametre next'tir.