Error-Handling Middleware
Error-handling middleware ki PEHCHAAN uske CHAAR ARGUMENTS hain: (err, req, res, next). Express in chaar parameters ko dekhkar hi decide karta hai ki ye error handler hai — teen arguments likh diye to ye normal middleware ban jaayega aur kabhi errors nahi pakdega.
Error handler SABSE AAKHIR mein, saare routes ke BAAD register karna chahiye. next(err) call karte hi Express beech ka sab kuch skip karke seedha isi handler par jaata hai.
app.use((err, req, res, next) => { // 4 args = error handler
console.error(err.stack);
const status = err.status || 500;
res.status(status).json({
error: status === 500 ? "Internal Server Error" : err.message,
});
});- Error middleware ki pehchaan = chaar arguments (err, req, res, next)
- Sabse aakhir mein, saare routes ke baad register karo
- Production mein stack trace log karo, client ko generic message bhejo
Express function ki ARITY (arguments ki count) dekhkar decide karta hai ki ye error handler hai ya normal middleware. Agar tumne (err, req, res) sirf teen likhe, to Express ise normal middleware samjhega aur "err" ko req maan lega — errors kabhi handle nahi honge. Chautha "next" use na ho tab bhi likhna zaroori hai.
// GALAT — 3 args, ye error handler nahi hai
app.use((err, req, res) => { ... });
// SAHI — 4 args
app.use((err, req, res, next) => { ... });Ek AppError class banane se status code aur message ek jagah aa jaate hain, aur error handler ko sirf ek shape samajhni padti hai. "Operational" errors (user ki galti, 4xx) aur "programmer" errors (bug, 5xx) ko alag treat karna production mein bahut madad karta hai.
class AppError extends Error {
constructor(message, status = 500) {
super(message);
this.status = status;
this.isOperational = true;
}
}
throw new AppError("User not found", 404);