Hono は API ファーストのアプリケーション向けの高速なウェブフレームワークで、Workers と Pages の両方を最初からサポートしています。
Workers を使う場合:
- Wrangler 設定ファイル で、D1 データベースを Worker にバインドしてください。
- D1 データベースには、Hono の
Context↗ パラメーター経由でアクセスできます。バインディング ↗ はcontext.envに公開されます。バインディング 名をDBにした場合、D1 Workers Binding API のメソッドはc.env.DBから呼び出します。 - Cloudflare Workers ↗ 向けの Hono ドキュメントを参照してください。
Pages Functions を使っている場合:
- D1 データベースを Pages Function にバインドします。
- ローカル開発では
wrangler devに--d1 BINDING_NAME=DATABASE_IDフラグを渡します。BINDING_NAMEはコード内の呼び出し名と一致させ、DATABASE_IDは Wrangler 設定ファイルのdatabase_idと一致させます。例:--d1 DB=xxxx-xxxx-xxxx-xxxx-xxxx。 - Cloudflare Pages ↗ 向けの Hono ガイドを参照してください。
次の例は、DB にバインドした D1 データベースへ、Workers スクリプトと Pages Function の両方からアクセスする方法を示します。
import { Hono } from "hono";
// This ensures c.env.DB is correctly typed
type Bindings = {
DB: D1Database;
};
const app = new Hono<{ Bindings: Bindings }>();
// Accessing D1 is via the c.env.YOUR_BINDING property
app.get("/query/users/:id", async (c) => {
const userId = c.req.param("id");
try {
let { results } = await c.env.DB.prepare(
"SELECT * FROM users WHERE user_id = ?",
)
.bind(userId)
.run();
return c.json(results);
} catch (e) {
return c.json({ err: "Failed to query user" }, 500);
}
});
// Export our Hono app: Hono automatically exports a
// Workers 'fetch' handler for you
export default app;import { Hono } from "hono";
import { handle } from "hono/cloudflare-pages";
// This ensures c.env.DB is correctly typed
type Bindings = {
DB: D1Database;
};
const app = new Hono<{ Bindings: Bindings }>().basePath("/api");
// Accessing D1 is via the c.env.YOUR_BINDING property
app.get("/query/users/:id", async (c) => {
const userId = c.req.param("id");
try {
let { results } = await c.env.DB.prepare(
"SELECT * FROM users WHERE user_id = ?",
)
.bind(userId)
.run();
return c.json(results);
} catch (e) {
return c.json({ err: "Failed to query user" }, 500);
}
});
// Export the Hono instance as a Pages onRequest function
export const onRequest = handle(app);