コンテンツにスキップ

HonoからのD1クエリ

HonoウェブフレームワークからのD1クエリ

HonoはAPIファーストアプリケーションを構築するための高速ウェブフレームワークで、WorkersPagesの両方に対して一級のサポートを提供しています。

Workersを使用する場合:

  • wrangler.tomlを設定して、D1データベースをWorkerにバインドしていることを確認してください。
  • HonoのContextパラメータを介してD1データベースにアクセスできます: bindingscontext.envで公開されています。DBという名前のバインディングを設定した場合、D1のクライアントAPIメソッドにはc.env.DBを介してアクセスします。
  • HonoのCloudflare Workersに関するドキュメントを参照してください。

Pages Functionsを使用している場合:

  1. D1データベースをPages Functionにバインドします。
  2. ローカルで開発する際に、wrangler dev--d1 BINDING_NAME=DATABASE_IDフラグを渡します。BINDING_NAMEはコード内で呼び出すものと一致し、DATABASE_IDはwrangler.tomlで定義されたdatabase_idと一致する必要があります。例えば、--d1 DB=xxxx-xxxx-xxxx-xxxx-xxxxのようになります。
  3. 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;