[ PROMPT_NODE_24118 ]
Hyperdrive API 参考
[ SKILL_DOCUMENTATION ]
# API 参考
查看 [README.md](./README.md) 获取概览,查看 [configuration.md](./configuration.md) 获取设置说明。
## 绑定接口
typescript
interface Hyperdrive {
connectionString: string; // PostgreSQL
// MySQL 属性:
host: string;
port: number;
user: string;
password: string;
database: string;
}
interface Env {
HYPERDRIVE: Hyperdrive;
}
**生成类型:** `npx wrangler types` (从 wrangler.jsonc 自动创建 worker-configuration.d.ts)
## PostgreSQL (node-postgres) - 推荐
typescript
import { Client } from "pg"; // pg@^8.17.2
export default {
async fetch(req: Request, env: Env): Promise {
const client = new Client({connectionString: env.HYPERDRIVE.connectionString});
try {
await client.connect();
const result = await client.query("SELECT * FROM users WHERE id = $1", [123]);
return Response.json(result.rows);
} finally {
await client.end();
}
},
};
**⚠️ Workers 连接限制:每个 Worker 调用 6 个** - 请合理使用连接池。
## PostgreSQL (postgres.js)
typescript
import postgres from "postgres"; // postgres@^3.4.8
const sql = postgres(env.HYPERDRIVE.connectionString, {
max: 5, // 每个 Worker 的限制 (Workers 最大: 6)
prepare: true, // 默认启用,缓存必需
fetch_types: false, // 如果不使用数组,可降低延迟
});
const users = await sql`SELECT * FROM users WHERE active = ${true} LIMIT 10`;
**⚠️ `prepare: true` 默认启用且为 Hyperdrive 缓存所必需。** 设置为 `false` 将禁用预处理语句和缓存。
## MySQL (mysql2)
typescript
import { createConnection } from "mysql2/promise"; // mysql2@^3.16.2
const conn = await createConnection({
host: env.HYPERDRIVE.host,
user: env.HYPERDRIVE.user,
password: env.HYPERDRIVE.password,
database: env.HYPERDRIVE.database,
port: env.HYPERDRIVE.port,
disableEval: true, // ⚠️ Workers 必需
});
const [results] = await conn.query("SELECT * FROM users WHERE active = ? LIMIT ?", [true, 10]);
ctx.waitUntil(conn.end());
**⚠️ MySQL 支持成熟度低于 PostgreSQL** - 优化较少,可能存在边缘情况。
## 查询缓存
**可缓存:**
sql
SELECT * FROM posts WHERE published = true;
SELECT COUNT(*) FROM users;
**不可缓存:**
sql
-- 写入操作
INSERT/UPDATE/DELETE
-- 易变函数
SELECT NOW();
SELECT random();
SELECT LASTVAL(); -- PostgreSQL
SELECT UUID();