Hono 是一个用于构建 API 优先应用的快速 Web 框架,对 Workers 和 Pages 提供一流支持。
使用 Workers 时:
- 确保您已配置 Wrangler 配置文件,将 D1 数据库绑定到 Worker。
- 您可以通过 Hono 的
Context↗ 参数访问 D1 数据库:绑定(binding) ↗ 暴露在context.env上。如果您配置了名为DB的绑定,则通过c.env.DB访问 D1 Workers Binding API 方法。 - 请参阅 Hono 的 Cloudflare Workers ↗ 文档。
如果您使用 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。 - 请参阅 Hono 的 Cloudflare Pages ↗ 指南。
以下示例展示如何从 Workers 脚本和 Pages Function 访问绑定到 DB 的 D1 数据库:
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);