Query D1 from Hono
Query D1 from the Hono web framework
Hono is a fast web framework for building API-first applications, and it includes first-class support for both Workers and Pages.
When using Workers:
- Ensure you have configured
wrangler.tomlto bind your D1 database to your Worker. - You can access your D1 databases via Hono’s
Contextparameter: bindings are exposed oncontext.env. If you configured a binding namedDB, then you would access D1’s client API methods viac.env.DB. - Refer to the Hono documentation for Cloudflare Workers.
If you are using Pages Functions:
- Bind a D1 database to your Pages Function.
- Pass the
--d1 BINDING_NAME=DATABASE_IDflag towrangler devwhen developing locally.BINDING_NAMEshould match what call in your code, andDATABASE_IDshould match thedatabase_iddefined in your wrangler.toml: for example,--d1 DB=xxxx-xxxx-xxxx-xxxx-xxxx. - Refer to the Hono guide for Cloudflare Pages.
The following examples show how to access a D1 database bound to DB from both a Workers script and a Pages Function:
src/index.tsimport { 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 propertyapp.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); }
});
// Export our Hono app: Hono automatically exports a
// Workers 'fetch' handler for you
export default app;
functions/api/[[route]].tsimport { Hono } from "hono";
import { handle } from "hono/cloudflare-pages";
const app = new Hono().basePath("/api");
// Accessing D1 is via the c.env.YOUR_BINDING propertyapp.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); }
});
// Export the Hono instance as a Pages onRequest function
export const onRequest = handle(app);