From 48bf528fe5c7aff820e24273004e49e38968816f Mon Sep 17 00:00:00 2001 From: Vegard Kyrkjedelen Hovland Date: Thu, 24 Apr 2025 10:22:02 +0200 Subject: [PATCH] feat: :goal_net: Write code to catch json-parsing errors vf-300 --- src/error/json-errors.ts | 5 +++++ src/main.ts | 9 ++++++++- src/middleware/error-middleware.ts | 15 +++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/error/json-errors.ts diff --git a/src/error/json-errors.ts b/src/error/json-errors.ts new file mode 100644 index 0000000..b42665f --- /dev/null +++ b/src/error/json-errors.ts @@ -0,0 +1,5 @@ +type JsonError = SyntaxError; + +export function isJsonParsingError(error: unknown): error is JsonError { + return error instanceof SyntaxError; +} diff --git a/src/main.ts b/src/main.ts index bf70ab9..2a17a73 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,6 +3,7 @@ import { hostOptions } from "@/src/enviroment"; import { errorHandler, httpErrorHandler, + jsonParsingErrorHandler, ormErrorHandler, zodErrorHandler, } from "@/src/middleware/error-middleware"; @@ -44,7 +45,13 @@ api.use("/teamapplications", teamApplicationRouter); api.use("/teams", teamsRouter); // Error handling -api.use(ormErrorHandler, zodErrorHandler, httpErrorHandler, errorHandler); +api.use( + jsonParsingErrorHandler, + ormErrorHandler, + zodErrorHandler, + httpErrorHandler, + errorHandler, +); api.listen(hostOptions.port, () => { console.info( diff --git a/src/middleware/error-middleware.ts b/src/middleware/error-middleware.ts index 094e364..4af97e7 100644 --- a/src/middleware/error-middleware.ts +++ b/src/middleware/error-middleware.ts @@ -2,6 +2,21 @@ import { clientError, isHttpError, serverError } from "@/src/error/http-errors"; import { isOrmError } from "@/src/error/orm-error"; import type { ErrorRequestHandler } from "express"; import { isZodErrorLike } from "zod-validation-error"; +import { isJsonParsingError } from "../error/json-errors"; + +export const jsonParsingErrorHandler: ErrorRequestHandler = ( + err, + _req, + res, + next, +) => { + if (isJsonParsingError(err)) { + return res + .status(400) + .json({ error: true, message: `Invalid json: ${err.message}` }); + } + next(err); +}; export const httpErrorHandler: ErrorRequestHandler = (err, _req, res, next) => { if (isHttpError(err)) {