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", + }); +};