HonoからのD1クエリ
HonoウェブフレームワークからのD1クエリ
HonoはAPIファーストアプリケーションを構築するための高速ウェブフレームワークで、WorkersとPagesの両方に対して一級のサポートを提供しています。
Workersを使用する場合:
wrangler.tomlを設定して、D1データベースをWorkerにバインドしていることを確認してください。- Honoの
Context↗パラメータを介してD1データベースにアクセスできます: bindings ↗はcontext.envで公開されています。DBという名前のバインディングを設定した場合、D1のクライアントAPIメソッドにはc.env.DBを介してアクセスします。 - HonoのCloudflare Workers ↗に関するドキュメントを参照してください。
Pages Functionsを使用している場合:
- D1データベースをPages Functionにバインドします。
- ローカルで開発する際に、
wrangler devに--d1 BINDING_NAME=DATABASE_IDフラグを渡します。BINDING_NAMEはコード内で呼び出すものと一致し、DATABASE_IDはwrangler.tomlで定義されたdatabase_idと一致する必要があります。例えば、--d1 DB=xxxx-xxxx-xxxx-xxxx-xxxxのようになります。 - HonoのCloudflare Pages ↗に関するガイドを参照してください。
以下の例は、WorkersスクリプトとPages Functionの両方からDBにバインドされたD1データベースにアクセスする方法を示しています:
import { Hono } from "hono";
// これによりc.env.DBが正しく型付けされますtype Bindings = { DB: D1Database;};
const app = new Hono<{ Bindings: Bindings }>();
// D1へのアクセスはc.env.YOUR_BINDINGプロパティを介して行います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) .all(); return c.json(results); } catch (e) { return c.json({ err: e.message }, 500); }});
// Honoアプリをエクスポートします:Honoは自動的に// Workersの'fetch'ハンドラーをエクスポートしますexport default app;import { Hono } from "hono";import { handle } from "hono/cloudflare-pages";
const app = new Hono().basePath("/api");
// D1へのアクセスはc.env.YOUR_BINDINGプロパティを介して行います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) .all(); return c.json(results); } catch (e) { return c.json({ err: e.message }, 500); }});
// HonoインスタンスをPagesのonRequest関数としてエクスポートしますexport const onRequest = handle(app);