Express.js – Middleware İle Hata Yönetimi

Merhaba,

Node.js framework mimarisinde Express.js modülü sayesinde oluşturduğumuz ara katmanlar(MiddleWare) ile projemizde yapılan requestlere karşılık verilen responsların arasına girilmekte ve taleplere dönülecek cevaplarda öncelikli modifikasyonlar sağlanabilmektedir. Bizler bu konuyu önceki makalelerimizden Express.js – Middleware(Ara Katman) Nedir? Nasıl Kullanılır? başlıklı yazımda detaylıca irdelemiş, teknik boyutta tam teferruatlıca ele almış bulunmaktayız. Bu içeriğimizde Middleware yapılarını kullanarak projemizde genel hata kontrolünün nasıl sağlandığını konuşacak ve yapısal olarak konuyu detaylıca değerlendireceğiz.

Tabi konunun açılımı açısından ilk olarak Middleware örneklendirmesiyle bir girizgah yapmamız gerekmektedir.

const app = require("express")();

app.use((request, response, next) => {
    console.log("MiddleWare 1...");
    next();
});
app.use((request, response, next) => {
    console.log("MiddleWare 2...");
    next();
});
app.use((request, response, next) => {
    console.log("MiddleWare 3...");
    next();
});
app.get("/", (request, response, next) => {
    response.send("Merhaba");
});

app.listen(5000, () => console.log("Yayın başladı..."));

Yukarıdaki kod bloğunu incelerseniz eğer üç adet Middleware tanımlanmış bulunmaktadır. Burada ilk olarak bilinmesi gereken husus şudur ki; Middleware yapıları tanımlanma sırasına göre tetiklenmektedirler.
Express.js - Middleware İle Hata Yönetimi
Eeee hoca! ne alaka şimdi hata yönetimiyle?” sorduğunuzu duyar gibiyim. Burada konumuzla alakadar olan husus aslında dikkatinizi çekmek istediğim şu kuraldır; hata yönetiminin sağlanacağı Middleware yapısının kesinlikle ve kesinlikle en sonuncu olarak tanımlanması gerekmektedir.

Tamam, anladık. Hata yönetimini sağlayacağımız Middleware diğer Middleware’lere nazaran sonuncu olarak tasarlanacaktır. Peki nasıl tasarlayacağız?” sorunuza istinaden parametre farkından yola çıkıp normal bir ara katmanla hata yönetimini sağlayan arasında farkı yaratabiliriz.

Makalenin girişinde refere edilmiş yazımda dahil şu ana kadar tüm makalelerimizde Middleware yapısını yukarıdaki örnekte de olduğu gibi “request”, “response” ve “next” olmak üzere üç parametreli bir şekilde tanımlamış bulunmaktayız. Eğer ki, parametre sayısı aşağıdaki gibi dört olursa işte bu bir hata yakalama özelliği gösteren Middileware yapısı olacaktır.

app.use((error, request, response, next) => {
    response.send(error.message);
});

Evet, görüldüğü üzere bu ara katman projede olacak tüm hataları yakalayacak ve üzerinde genel bir hata kontrolü yapmamızı sağlayacak şekilde nitelendirilmiştir.

Gelin şimdi yapay bir hata fırlatalım ve ilgili Middleware’i kullanarak bu hata kontrolünü sağlayalım.

const app = require("express")();

app.use((request, response, next) => {
    console.log("MiddleWare 1...");
    next();
});
app.use((request, response, next) => {
    console.log("MiddleWare 2...");
    next();
});
app.use((request, response, next) => {
    console.log("MiddleWare 3...");
    next();
});
app.use((error, request, response, next) => {
    response.send(error.message);
});
app.get("/", (request, response, next) => {
    throw new Error("Hata var.");
});

app.listen(5000, () => console.log("Yayın başladı..."));

Yukarıdaki kod bloğunu derleyip çalıştırdığımızda çıktı olarak ekranda aşağıdaki gibi bir sonuçla karşılaşmaktayız.
Express.js - Middleware İle Hata Yönetimi
La hoca! Bu çokta kontrol edilmiş bir hataya benzemiyor!” dediğinizide duyar gibiyim 🙂 Hata ara katmanını Middleware olarak tanımlanan diğer yapıların sonuna tanımlamış olabiliriz ama dikkat ederseniz http isteğini göz ardı etmiş bulunmaktayız ve örneğimizde “get” fonksiyonu hata katmanından sonra tanımlanmış bulunmaktadır. Dolayısıyla http istekleride özünde birer ara katman gibi “use” fonksiyonu ile tanımlanabilen yapılar olmasından ötürü hata katmanlarının bu yapılardan da sonra gelmeleri gerekmektedir.

Onca anlatımın üzerine bu olası hatanın tezahür etme ihtimaline nazaran sizi bu ihtimal doğrultusunda başta uyarmak istedim.

const app = require("express")();

app.use((request, response, next) => {
    console.log("MiddleWare 1...");
    next();
});
app.use((request, response, next) => {
    console.log("MiddleWare 2...");
    next();
});
app.use((request, response, next) => {
    console.log("MiddleWare 3...");
    next();
});
app.get("/", (request, response, next) => {
    throw new Error("Hata var.");
});
app.use((error, request, response, next) => {
    response.send(error.message);
});

app.listen(5000, () => console.log("Yayın başladı..."));

Eğer ki kodumuzu yukarıdaki gibi düzeltip, derleyip, çalıştırırsak aşağıdaki ekran görüntüsünde olduğu gibi fırlatılan hata neticesinde hata kontrol ara katmanımız devreye girecek ve hatayı istediğimiz gibi yönlendirecektir.
Express.js - Middleware İle Hata Yönetimi

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…

İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.