Dynamic routes with OpenAPI Hono not working under certain conditions
Issue Summary
When using the following code to set up a route, the route appears in the Swagger documentation but results in a 404 error when accessed:
const app = new OpenAPIHono<WorkerHonoContext>();
app.route("/api/v1/users/", usersHono);
export const usersHono = new OpenAPIHono<WorkerHonoContext>();
registerUserWebsocketRoute(usersHono);
export const UserWebsocketRoute = createRoute({
tags: ["User"],
summary: "User Websocket",
method: "post",
path: "{userId}/websocket",
request: {
cookies: CookiesSchema,
params: ParamsSchema,
headers: HeadersSchema,
},
responses: {
"1001": { description: "WebSocket has been upgraded" },
"400": ZodErrorResponseConfig,
"429": ZodErrorResponseConfig,
},
});
userHono.openapi(UserWebsocketRoute, async (c) => {
...
});
Expected Behavior
The route should be accessible, as it is correctly displayed in the Swagger documentation.
Actual Behavior
Attempting to access this route returns a 404 error.
Solution
The route becomes accessible if the following adjustments are made:
-
Update the subrouter registration:
app.route("/api/v1/users", usersHono); -
Adjust the path format in the
UserWebsocketRoute:path: "/{userId}/websocket",
Additional Context
It seems that the trailing slash in the route definition (/api/v1/users/) and the missing leading slash in UserWebsocketRoute's path may be causing the routing issue.
I'm experiencing this too!
@constantins2001 You should write path: "/{userId}/websocket" in createRoute.
@constantins2001 You should write
path: "/{userId}/websocket"increateRoute.
That's the solution I provided in the issue, but that's still strange behavior ^^
@constantins2001
The slash at the beginning is needed for the path. It’s an expected behavior.