Error Handling Middleware
Error Handling Middleware in Express.js
Express.js এ Error Handling Middleware কী? কেন দরকার? কিভাবে কাজ করে?—সবকিছু সহজ ভাষায় ব্যাখ্যা করা হলো।
🔷 Error Handling Middleware কী?
Express.js এর একটি বিশেষ middleware যা application এ যেকোনো error কে catch করে এবং সুন্দরভাবে user কে response দেয়।
এই middleware অ্যাপ্লিকেশনকে crash হওয়া থেকে বাঁচায়
এবং developer-friendly error debugging সহজ করে।
🔷 কেন Error Handling Middleware জরুরী?
- অ্যাপ্লিকেশন crash হওয়া থেকে রক্ষা করে
- এক জায়গা থেকে সব error manage করা যায়
- Custom error message পাঠানো যায়
- Production-friendly error logging করা যায়
- অ্যাপ secure থাকে (sensitive error leak হওয়া বন্ধ)
🔷 Error Handling Middleware এর Structure
Express error middleware এর চারটি parameter থাকে:
(err, req, res, next) => {
...
}
এগুলো না থাকলে Express এটাকে error middleware হিসেবে ধরবে না।
🔷 Simple Error Handler Example
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({
status: "error",
message: err.message || "Something went wrong!",
});
});
🔷 কিভাবে Error throw করবেন?
যেকোনো route-এ error create করা যায়:
app.get("/test", (req, res) => {
throw new Error("Test error occurred!");
});
অথবা next() দিয়ে:
app.get("/next-error", (req, res, next) => {
const err = new Error("Next() error");
err.statusCode = 400;
next(err);
});
🔷 Custom Error Handler with Status Code
Custom error response পাঠানোর example:
app.use((err, req, res, next) => {
const statusCode = err.statusCode || 500;
res.status(statusCode).json({
success: false,
message: err.message || "Server Error",
stack: process.env.NODE_ENV === "development" ? err.stack : null
});
});
🔷 Async Function Error Handling (try–catch)
Async routes এ error catch করতে try-catch ব্যবহার করা হয়:
app.get("/async-check", async (req, res, next) => {
try {
const data = await fetchData();
res.json(data);
} catch (err) {
next(err);
}
});
🔷 DRY Code এর জন্য Async Error Wrapper
সব async route এ try–catch লিখার দরকার নেই। Wrapper function ব্যবহার করতে পারেন:
const asyncHandler = (fn) => (req, res, next) =>
Promise.resolve(fn(req, res, next)).catch(next);
app.get("/user", asyncHandler(async (req, res) => {
const user = await User.find();
res.json(user);
}));
🔷 404 Not Found Middleware
app.use((req, res) => {
res.status(404).json({
status: "fail",
message: "Route Not Found"
});
});
🔷 Error Handling Flow (Diagram)
- Route কোন error detect করলে → next(err)
- Express error middleware এ redirect করে
- Error log হয় (development)
- Client কে clean response দেখানো হয়
🔷 Best Practices
- Error message user-friendly রাখুন
- Stack trace development-এ দেখান, production এ hide করুন
- সব async route এ asyncHandler wrapper ব্যবহার করুন
- Custom error class তৈরি করুন
- 404 middleware অবশ্যই add করুন
🔷 Custom Error Class Example
class AppError extends Error {
constructor(message, statusCode) {
super(message);
this.statusCode = statusCode;
}
}
throw new AppError("User not found", 404);
🔷 Summary
- Error Handling Middleware 4 parameters দিয়ে detect হয়
- next(err) দিয়ে error pass করা যায়
- Custom error response তৈরি করা যায়
- Async routes-এর জন্য wrapper ব্যবহার করতে হয়
- এটি Express.js এর security & stability maintain করে
✔ Express.js এর সবচেয়ে গুরুত্বপূর্ণ topic — Error Handling mastered!
👼 Quiz
/