All files / src/middleware errorHandler.js

100% Statements 20/20
100% Branches 14/14
100% Functions 2/2
100% Lines 20/20

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 415x 5x 5x 5x     32x 8x   8x             24x 1x     23x 1x     22x 2x     20x 16x     4x 3x   1x   4x     5x
const { ZodError } = require("zod");
const jwt = require("jsonwebtoken");
const multer = require("multer");
const { AppError } = require("../lib/errors");
 
function errorHandler(err, req, res, next) {
  if (err instanceof ZodError) {
    return res.status(400).json({
      message: "Invalid input",
      issues: err.issues.map((i) => ({
        path: i.path.join("."),
        message: i.message,
      })),
    });
  }
 
  if (err.type === "entity.parse.failed") {
    return res.status(400).json({ message: "Invalid JSON in request body" });
  }
 
  if (err instanceof multer.MulterError) {
    return res.status(400).json({ message: err.message });
  }
 
  if (err instanceof jwt.JsonWebTokenError || err instanceof jwt.TokenExpiredError) {
    return res.status(401).json({ message: "Invalid token" });
  }
 
  if (err instanceof AppError) {
    return res.status(err.status).json({ message: err.message, msg: err.message });
  }
 
  if (req.log) {
    req.log.error({ err }, "unhandled error");
  } else {
    console.error(err);
  }
  res.status(500).json({ message: "Internal server error" });
}
 
module.exports = errorHandler;