Prisma ORM ↗ 是注重类型安全和开发者体验的 Node.js 与 TypeScript ORM。本示例演示如何在 Workers 应用中通过 Cloudflare Hyperdrive 将 Prisma ORM 与 PostgreSQL 配合使用。
- 拥有 Workers 访问权限的 Cloudflare 账户
- PostgreSQL 数据库(例如 Prisma Postgres ↗)
- 指向 PostgreSQL 数据库的 Hyperdrive 配置
- 现有 Worker 项目
将 Prisma CLI 安装为开发依赖:
npm i -D prismayarn add -D prismapnpm add -D prismabun add -d prisma安装 pg 驱动及用于 Hyperdrive 的 Prisma 驱动适配器:
npm i pg@>8.13.0 @prisma/adapter-pgyarn add pg@>8.13.0 @prisma/adapter-pgpnpm add pg@>8.13.0 @prisma/adapter-pgbun add pg@>8.13.0 @prisma/adapter-pg若使用 TypeScript,安装类型包:
npm i -D @types/pgyarn add -D @types/pgpnpm add -D @types/pgbun add -d @types/pg在 Wrangler 配置文件中添加所需的 Node.js 兼容性标志和 Hyperdrive 绑定(binding):
在 wrangler.jsonc 中添加 Node.js 兼容性标志和 Hyperdrive 绑定(binding):
{
// required for database drivers to function
"compatibility_flags": [
"nodejs_compat"
],
// Set this to today's date
"compatibility_date": "2026-08-17",
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "<your-hyperdrive-id-here>"
}
]
}compatibility_flags = [ "nodejs_compat" ]
# Set this to today's date
compatibility_date = "2026-08-17"
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<your-hyperdrive-id-here>"在应用中初始化 Prisma:
npx prisma init这将创建包含 schema.prisma 文件的 prisma 文件夹和 .env 文件。
在 prisma/schema.prisma 文件中定义数据库 schema:
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id Int @id @default(autoincrement())
name String
email String @unique
createdAt DateTime @default(now())
}将数据库连接字符串添加到 Prisma 创建的 .env 文件:
DATABASE_URL="postgres://user:password@host:port/database"在 package.json 中添加辅助脚本:
"scripts": {
"migrate": "npx prisma migrate dev",
"generate": "npx prisma generate --no-engine",
"studio": "npx prisma studio"
}生成支持驱动适配器的 Prisma 客户端:
npm run generate生成并应用数据库 schema:
npm run migrate提示时,为迁移提供名称(例如 init)。
使用 Prisma ORM 时,请使用 Hyperdrive 配置。更新 src/index.ts 文件:
import { PrismaPg } from "@prisma/adapter-pg";
import { PrismaClient } from "@prisma/client";
export interface Env {
HYPERDRIVE: Hyperdrive;
}
export default {
async fetch(request, env, ctx): Promise<Response> {
// Create Prisma client using driver adapter with Hyperdrive connection string
const adapter = new PrismaPg({ connectionString: env.HYPERDRIVE.connectionString });
const prisma = new PrismaClient({ adapter });
// Sample query to create and fetch users
const user = await prisma.user.create({
data: {
name: "John Doe",
email: `john.doe.${Date.now()}@example.com`,
},
});
const allUsers = await prisma.user.findMany();
return Response.json({
newUser: user,
allUsers: allUsers,
});
},
} satisfies ExportedHandler<Env>;部署 Worker:
npx wrangler deploy- 了解更多 Hyperdrive 工作原理。
- 参阅故障排除指南以排查常见问题。
- 进一步了解 Cloudflare Workers 可用的其他存储选项。