Closed4
HonoでGETは正常なのにPOSTは404 Not Foundエラーが返ってくる

Cloudflare Worker + Honoでルーティングを行っていると、
[wrangler:inf] GET /matchmaking/status 200 OK (2ms)
[wrangler:inf] POST /matchmaking/start 404 Not Found (3ms)
こんな事が起きた。
404 Not Foundなので、エンドポイントが存在しないというエラーだが、Honoで設定してはいる。

Cloudflare WorkerではDurable Objectを使っており、Durable Object内でもHonoを宣言して再度ルーティングするような実装。
index.ts
const app = new Hono();
app.all("/matchmaking/*", async (c) => {
let id: DurableObjectId;
id = c.env.MATCHMAKING.idFromName("matchmaking");
const stub = c.env.MATCHMAKING.get(id);
const response = await stub.fetch(c.req.url);
return response;
})
DurableObject/matchmaking.ts
export class MatchmakingDurableObject implements DurableObject {
app = new Hono();
constructor(private readonly state: DurableObjectState, env: Env){
this.app.post("/matchmaking/start", async (c) => {
// ...
}
this.app.get("/matchmaking/status", async (c) => {
// ...
}
}
fetch(request: Request) {
return this.app.fetch(request);
}
}

本当にしょうもないんですが、
index.ts
const response = await stub.fetch(c.req.raw);
こうですね。
Hono.fetch(req: Request)
なので、引数はRequest型を取ります。
Github Copilotでササっと書いていて、fetchという名前なのでURLを引数に取るのが自然すぎて見逃していました。
ただ、GETだと正常に機能していた理由がよくわかりませんね。
なんで引数にURL入れて動いたんやろか

URLでも動くらしい
このスクラップは2024/04/07にクローズされました