Newer
Older
express-blog / src / middleware / errorHandler.js
const path = require("path");

module.exports = async (err, req, res, next) => {
  const statusCode = err.statusCode ?? 500;
  const message = err.message ?? "Internal Server Error";

  if (req?.log?.error) {
    req.log.error(
      JSON.stringify({
        message,
        stack: err.stack || "No stack trace available",
        method: req.method,
        url: req.originalUrl || req.url,
        statusCode,
        code: err.code || null,
      })
    );
  } else {
    console.error(err);
  }
  const errorContextMap = {
    EBADCSRFTOKEN: {
      title: "Forbidden",
      message: "Your request could not be processed.",
      statusCode: 403,
    },
    404: {
      title: "Not Found",
      message: "The requested resource was not found.",
      statusCode: 404,
    },
  };
  const errorKey = err.code || err.statusCode;
  const defaultErrorContext = {
    title: `Error ${statusCode}`,
    message: "An unexpected error occurred. Please try again later.",
    statusCode,
  };
  const errorContext = errorContextMap[errorKey] || defaultErrorContext;

  res.redirect(`/error?code=${errorContext.statusCode}`);
};