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 দেখানো হয়
Error Handling Flow

🔷 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
/

লোড হচ্ছে...