Express.js – Hata Yönetimi
Merhaba,
Bu içeriğimizde Express.js’de genel hata yönetimi üzerine konuşuyor olacağız.
Express.js’de genel hata yönetimini sağlayabilmek için hata yönetimi için özel dizayn edilmiş middleware kullanmamız gerekmektedir.
Örnek olarak aşağıdaki kod bloğunu inceleyiniz.
const express = require("express"); const app = express(); const routes = require("./routes"); const middleware = require("./middleware") app.use("/", middleware); app.set("view engine", "pug"); app.use("/", routes); //------ Error MiddleWare app.use("/", (error, request, response, next) => { response.status(error.status); response.render("error", { status: error.status, message: error.message }); }); //------ Error MiddleWare app.use(express.static("node_modules")); app.listen(5000);
Yukarıdaki kod bloğuna bakarsanız eğer hata ara katmanının tanımlandığını göreceksiniz. Bu tanımlanan callback fonksiyonu, tanımlandığı “use” fonksiyonunun birinci parametresindeki “/” değerden dolayı tüm routelara uygun çalışacaktır. Ayrıca bu callback fonksiyon, alınan hatayla ilgili bilgi alınabilmesi için “error” parametresi barındırmaktadır.
. . . router.get("/", (request, response, next) => { if (false) response.render("index", { title: "Anasayfa" }); else next({ status: 404, message: "Beklenmeyen bir hatayla karşılaşıldı." }); }) . . .
Tanımlanmış routelar arasından herhangi birinde yukarıdaki kontrolü sağlarsak eğer ilgili “next” fonksiyonu tetiklendiği zaman bizim biraz önce tanımlamış olduğumuz error middleware’ımız tetiklenecektir ve parametre olarak verdiğimiz değişkenler ilgili hata katmanındaki “error” parametresi tarafından yakalanacak ve hata bilgisini taşıyacaktır. Burada dikkat etmeniz gereken husus, hata kontrolünü sağlayacağımız route yapılarına bildiğimiz “request” ve “response” parametrelerinin yanında bir de “next” parametresi eklenmiş bulunmaktadır.
Olası bir hata yakalandığı esnada render edilecek “error.pug” dosyamızıda aşağıdaki gibi dizayn edersek eğer;
div(class="alert alert-primary", role="alert") h2(style="color:red;") Hata h3 Status : #{status} h4 Message : #{message}
şeklinde olası hatalarımızı karşılaşmaktayız.
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…