Loading lessons...
Global Error Handling Middleware
Special 4-Argument Error Middleware
Express recognizes a middleware function as an error-handling middleware only if it takes four parameters: (err, req, res, next).
Defining Global Error Handler
Error-handling middleware MUST be mounted after all other app.use() and route definitions.
const express = require("express");
const app = express();
app.use(express.json());
// Normal route triggering error
app.get("/broken", (req, res, next) => {
const error = new Error("Something went wrong on server!");
error.statusCode = 500;
next(error); // Passing error to error middleware
});
// Global Error Handler Middleware (MUST HAVE 4 ARGUMENTS)
app.use((err, req, res, next) => {
const statusCode = err.statusCode || 500;
const message = err.message || "Internal Server Error";
console.error("[ERROR LOG]:", err.stack);
res.status(statusCode).json({
status: "error",
statusCode,
message,
...(process.env.NODE_ENV === "development" && { stack: err.stack })
});
});
⚠️ DocHero Safety Disclaimer
When you pass an argument into next(err), Express skips all remaining non-error middleware and jumps straight to the next registered 4-argument error handling middleware.
TL;DR
- Error middleware requires 4 parameters:
(err, req, res, next). - Pass errors downstream by invoking
next(error). - Always place global error handlers at the bottom of middleware stack.