Node.js
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.
Örnek çözümü göster
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(); });
});
});
Kendini test et
-
Hata middleware'i kaç parametre alır?
app.use((err, req, res, next) => { ... })
Cevabı göster
Dört — Dört parametre: err, req, res, next.
-
Parçayı rolüne eşle
- 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
-
hata middleware imzasını tamamla
app.use((err, req, res, ____) => { console.log(err.message); res.status(500).send("Hata"); });
Cevabı göster
app.use((err, req, res, next) => { console.log(err.message); res.status(500).send("Hata"); });
Sıradaki ders: Body parser