From ccf4e9c0e4e08c427efe31c29b140ab9d06f6aed Mon Sep 17 00:00:00 2001 From: Baraich Date: Sun, 5 Jan 2025 21:01:20 +0530 Subject: [PATCH] fix(hyper-express): updated routing logic in respect to trailing slash --- packages/hyper-express/src/components/Server.js | 9 +++++++-- packages/hyper-express/src/components/router/Router.js | 3 +++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/hyper-express/src/components/Server.js b/packages/hyper-express/src/components/Server.js index da9b919..5f5632c 100644 --- a/packages/hyper-express/src/components/Server.js +++ b/packages/hyper-express/src/components/Server.js @@ -417,9 +417,14 @@ class Server extends Router { this.#routes[method][pattern] = route; // Bind the uWS route handler which pipes all incoming uWS requests to the HyperExpress request lifecycle - return this.#uws_instance[method](pattern, (response, request) => { + const callback = (response, request) => { this._handle_uws_request(route, request, response, null); - }); + }; + this.#uws_instance[method](pattern, callback); + + // Shall the registered (/foo) route also handle (/foo/) requests? + this.#uws_instance[method](pattern + '/', callback); + return; } } diff --git a/packages/hyper-express/src/components/router/Router.js b/packages/hyper-express/src/components/router/Router.js index 30ee49a..0fc50a4 100644 --- a/packages/hyper-express/src/components/router/Router.js +++ b/packages/hyper-express/src/components/router/Router.js @@ -119,6 +119,9 @@ class Router { // This is because uWebsockets.js does not treat non-leading slashes as catchall stars if (pattern.startsWith('*')) pattern = '/' + pattern; + // Handle trailing slash for all patterns except the root pattern(/). + if (pattern !== '/' && pattern.endsWith('/')) pattern = pattern.slice(0, -1); + // Parse the middlewares into a new array to prevent mutating the original const middlewares = [];