← Cloudflare D1 / d1 / examples
Запрос к D1 из Hono
Hono - это быстрый веб-фреймворк для создания API-ориентированных приложений, который в равной мере хорошо поддерживает Workers и Pages.
При использовании Workers:
- Убедитесь, что настроили конфигурационный файл Wrangler чтобы привязать базу данных D1 к своему Worker.
- Доступ к базам данных D1 можно получить через Hono
Context↗ параметр: привязки ↗ доступны наcontext.env. Если вы настроили привязка с именемDB, в этом случае вы обращались бы к D1 Workers Binding API методы черезc.env.DB. - См. документацию Hono для Cloudflare Workers ↗.
Если вы используете Pages Functions:
- Привяжите базу данных D1 к своему Pages Function.
- Передайте
--d1 BINDING_NAME=DATABASE_IDфлаг дляwrangler devпри локальной разработке.BINDING_NAMEдолжен соответствовать вызову в вашем коде, иDATABASE_IDдолжен совпадать сdatabase_idопределённые в конфигурационном файле Wrangler, например--d1 DB=xxxx-xxxx-xxxx-xxxx-xxxx. - См. руководство Hono для Cloudflare Pages ↗.
В следующих примерах показано, как обращаться к базе данных D1, привязанной к DB как из скрипта 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);