From 60cabb3bcb62e4c1b3f8e5cec1e4de81ed28d784 Mon Sep 17 00:00:00 2001 From: Tomas Krejci Date: Wed, 17 Jun 2026 19:37:59 +0200 Subject: [PATCH] Add dinosaur API error handler --- lecture_5/dinosaurs/src/app.js | 3 +++ .../dinosaurs/src/validation/errorHandler.js | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 lecture_5/dinosaurs/src/validation/errorHandler.js diff --git a/lecture_5/dinosaurs/src/app.js b/lecture_5/dinosaurs/src/app.js index 3286f3d..1ebd2ef 100644 --- a/lecture_5/dinosaurs/src/app.js +++ b/lecture_5/dinosaurs/src/app.js @@ -1,9 +1,12 @@ import express from "express"; import { dinosaurRouter } from "./routes/dinosaurRoutes.js"; +import { errorHandler } from "./validation/errorHandler.js"; const app = express(); app.use(express.json()); app.use(dinosaurRouter); +// Error middleware must be registered after routes so it can handle rejected route handlers. +app.use(errorHandler); export { app }; diff --git a/lecture_5/dinosaurs/src/validation/errorHandler.js b/lecture_5/dinosaurs/src/validation/errorHandler.js new file mode 100644 index 0000000..56abc8d --- /dev/null +++ b/lecture_5/dinosaurs/src/validation/errorHandler.js @@ -0,0 +1,17 @@ +import { ZodError } from "zod"; + +// Centralized Express error middleware for validation and unexpected runtime errors. +export const errorHandler = (error, _request, response, _next) => { + console.error(error); + + if (error instanceof ZodError) { + return response.status(400).json({ + message: "Validation error", + errors: error.issues, + }); + } + + return response.status(500).json({ + message: "Internal server error", + }); +};