honojs / middleware

monorepo for Hono third-party middleware/helpers/wrappers
https://hono.dev
474 stars 169 forks source link

Dynamic routes with OpenAPI Hono not working under certain conditions #810

Open constantins2001 opened 2 weeks ago

constantins2001 commented 2 weeks ago

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:

  1. Update the subrouter registration:

    app.route("/api/v1/users", usersHono);
  2. 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.