errorHandler.js 843 B

12345678910111213141516171819202122232425
  1. import { ZodError } from "zod";
  2. import { AppError } from "../shared/errors/index.js";
  3. export function errorHandler(err, _req, res, _next) {
  4. if (err instanceof ZodError) {
  5. return res.status(400).json({ error: "validation_error", details: err.errors });
  6. }
  7. if (err instanceof AppError) {
  8. return res.status(err.statusCode).json({ error: err.message, ...(err.details ?? {}) });
  9. }
  10. if (err?.code === "ER_DUP_ENTRY" || err?.nativeError?.code === "ER_DUP_ENTRY") {
  11. return res.status(409).json({ error: "Registro duplicado (login ou email já cadastrado)." });
  12. }
  13. const status = Number(err?.statusCode ?? err?.status ?? 500);
  14. const message = typeof err?.message === "string" ? err.message : "internal_error";
  15. if (status >= 500) {
  16. console.error("[error]", err);
  17. }
  18. res.status(status).json({ error: message });
  19. }