Lesson 31 +10 XP

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.