From 823950d36d486056eeb2df57c5746a09bf8e6353 Mon Sep 17 00:00:00 2001 From: Leonardo Raele Date: Thu, 13 Apr 2023 11:40:24 -0300 Subject: [PATCH 1/2] Support error handler middlewares --- src/router.ts | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/router.ts b/src/router.ts index 0a06e7c..259b28b 100644 --- a/src/router.ts +++ b/src/router.ts @@ -77,20 +77,31 @@ export class HyperBunRouter { } const hyperRequest = new HyperBunRequest(request); + + for (let i = 0; i < this.#middlewares.length; i++) { + const response = await this.#middlewares[i](hyperRequest, context).catch(e => e); - for (const middleware of this.#middlewares) { - const response = await middleware(hyperRequest, context); + if (response instanceof Response) { + return response; + } if (response instanceof Error) { + let error = response; + const relevantErrorMiddlewares = this.#middlewares.slice(i + 1) + .filter(middleware => middleware.length === 3); + for (const middleware of relevantErrorMiddlewares) { + const response = await middleware(hyperRequest, context, error); + if (response instanceof Error) { + error = response; + } else if (response instanceof Response) { + return response; + } + } return new Response(response.message, { status: 500, }); } - - if (response instanceof Response) { - return response; - } - } + }); const value = await matched.handler(hyperRequest, context); return this.#createResponse(value); From b83f436464bfe88f84b2bba50ba4f170430406f7 Mon Sep 17 00:00:00 2001 From: Leonardo Raele Date: Thu, 13 Apr 2023 11:47:53 -0300 Subject: [PATCH 2/2] Fixing `for` brackets; moving code around to reduce diff --- src/router.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/router.ts b/src/router.ts index 259b28b..778c807 100644 --- a/src/router.ts +++ b/src/router.ts @@ -81,10 +81,6 @@ export class HyperBunRouter { for (let i = 0; i < this.#middlewares.length; i++) { const response = await this.#middlewares[i](hyperRequest, context).catch(e => e); - if (response instanceof Response) { - return response; - } - if (response instanceof Error) { let error = response; const relevantErrorMiddlewares = this.#middlewares.slice(i + 1) @@ -101,7 +97,11 @@ export class HyperBunRouter { status: 500, }); } - }); + + if (response instanceof Response) { + return response; + } + } const value = await matched.handler(hyperRequest, context); return this.#createResponse(value);