From 2947f57db1cabb343644bde379fa9ec54e9d7750 Mon Sep 17 00:00:00 2001 From: Kasper Fabricius Kristensen <45367945+kasperkristensen@users.noreply.github.com> Date: Wed, 15 Nov 2023 19:41:10 +0100 Subject: [PATCH] fix(medusa): Update `wrapHandler` so it also passes errors in non-async route handlers to the errorHandler middleware (#5597) * fix: Align @types/react versions across UI packages * update codeowners * fix: Update wrapHandler so it also catches errors for non-async route handlers * rm chaining * align wrapHandler in utils and add deprecation note --------- Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com> --- .changeset/eleven-books-fail.md | 5 +++++ .../medusa/src/api/middlewares/await-middleware.ts | 11 +++++++++-- packages/medusa/src/loaders/helpers/routing/index.ts | 3 +-- packages/utils/src/common/wrap-handler.ts | 8 ++++++-- 4 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 .changeset/eleven-books-fail.md diff --git a/.changeset/eleven-books-fail.md b/.changeset/eleven-books-fail.md new file mode 100644 index 0000000000..07846f272f --- /dev/null +++ b/.changeset/eleven-books-fail.md @@ -0,0 +1,5 @@ +--- +"@medusajs/medusa": patch +--- + +fix(medusa): Update wrapHandler so that it is also able to catch errors for sync handlers diff --git a/packages/medusa/src/api/middlewares/await-middleware.ts b/packages/medusa/src/api/middlewares/await-middleware.ts index 5e9f728219..fec27d568c 100644 --- a/packages/medusa/src/api/middlewares/await-middleware.ts +++ b/packages/medusa/src/api/middlewares/await-middleware.ts @@ -2,8 +2,11 @@ import { NextFunction, Request, RequestHandler, Response } from "express" type handler = (req: Request, res: Response) => Promise +/** + * @deprecated use `import { wrapHandler } from "@medusajs/utils"` + */ export default (fn: handler): RequestHandler => { - return (req: Request, res: Response, next: NextFunction) => { + return async (req: Request, res: Response, next: NextFunction) => { if (req?.errors?.length) { return res.status(400).json({ errors: req.errors, @@ -12,7 +15,11 @@ export default (fn: handler): RequestHandler => { }) } - return fn(req, res).catch(next) + try { + return await fn(req, res) + } catch (err) { + next(err) + } } } diff --git a/packages/medusa/src/loaders/helpers/routing/index.ts b/packages/medusa/src/loaders/helpers/routing/index.ts index 3dd53092d0..0fea3ad87a 100644 --- a/packages/medusa/src/loaders/helpers/routing/index.ts +++ b/packages/medusa/src/loaders/helpers/routing/index.ts @@ -1,4 +1,4 @@ -import { promiseAll } from "@medusajs/utils" +import { promiseAll, wrapHandler } from "@medusajs/utils" import cors from "cors" import { Router, json, text, urlencoded, type Express } from "express" import { readdir } from "fs/promises" @@ -9,7 +9,6 @@ import { authenticateCustomer, errorHandler, requireCustomerAuthentication, - wrapHandler, } from "../../../api/middlewares" import { ConfigModule } from "../../../types/global" import logger from "../../logger" diff --git a/packages/utils/src/common/wrap-handler.ts b/packages/utils/src/common/wrap-handler.ts index af30e78610..007f02af93 100644 --- a/packages/utils/src/common/wrap-handler.ts +++ b/packages/utils/src/common/wrap-handler.ts @@ -3,7 +3,7 @@ import { NextFunction, Request, RequestHandler, Response } from "express" type handler = (req: Request, res: Response) => Promise export const wrapHandler = (fn: handler): RequestHandler => { - return (req: Request, res: Response, next: NextFunction) => { + return async (req: Request, res: Response, next: NextFunction) => { const req_ = req as Request & { errors?: Error[] } if (req_?.errors?.length) { return res.status(400).json({ @@ -13,7 +13,11 @@ export const wrapHandler = (fn: handler): RequestHandler => { }) } - return fn(req, res).catch(next) + try { + return await fn(req, res) + } catch (err) { + next(err) + } } }