コンテンツにスキップ

Honoを導入

Honoをインストール

Honoをインストールするには、以下のコマンドを実行します。

Terminal window
bun add hono

動作確認

次に簡単なコードを作成します。
POSTメソッドで、json形式のデータを受け取ります。
そして、そのまま出力するようにします。

src/index.ts
import { Hono } from "hono";
const app = new Hono();
app.post("/", async (c) => {
const body = await c.req.json();
return c.json(body);
});
export default app;

適当にJSONを送信してみましょう。

{
"aaa": "aaa"
}

送信したJSONが出力されました。
JSONを変更して、もう1度送信してみましょう。

{
"bbb": "bbbb"
}

また、送信したJSONが出力されました。
ただ、このままではどんなJSONも受け取るようになっています。
これを、決まったJSONを受け取るようにします。
それには、zodを使用して、バリデーションスキーマを作成します。

zodを使用したバリデーション

Honoには、zodを利用するためのミドルウェアが用意されています。
ターミナルで、以下のコマンドを実行します。
すると、zValidatorがインストールされます。

Terminal window
bun add @hono/zod-validator

次に、zValidatorを使うためにコードを変更します。
ハイライトしているコードが変更箇所です。

src/index.ts
import { zValidator } from "@hono/zod-validator";
import { Hono } from "hono";
import { z } from "zod";
const app = new Hono();
const schema = z.object({
prompt: z.string(),
});
app.post("/", async (c) => {
app.post("/", zValidator("json", schema), async (c) => {
const body = await c.req.json();
const body = await c.req.valid("json");
return c.json(body);
});
export default app;

バリデーションの動作確認

JSONをそのまま、送信してみましょう。

{
"bbb": "bbbb"
}

今度は、エラーが発生しました。
そこで、bbbをスキーマで設定したpromptに変更します。

{
"prompt": "bbbb"
}

もう1度実行すると、次は表示されました。