Prisma Postgres ↗ 是托管的无服务器 PostgreSQL 数据库。它支持连接池、缓存、实时订阅和查询优化建议等功能。
在本教程中,你将学习如何:
- 设置带有 Prisma ORM ↗ 的 Cloudflare Workers 项目。
- 从 Prisma CLI 创建 Prisma Postgres 实例。
- 使用 Prisma Postgres 建模数据并运行迁移。
- 从 Workers 查询数据库。
- 将 Worker 部署到 Cloudflare。
要跟随本指南,请确保你具备以下条件:
- 已安装 Node.js
v18.18或更高版本。 - 有效的 Cloudflare 账户 ↗。
- 对安装和使用命令行界面(CLI)应用有基本了解。
首先,使用 C3 在命令行中创建 Worker 项目:
npm create cloudflare@latest prisma-postgres-worker -- --type=hello-world --ts=true --git=true --deploy=false然后进入项目:
cd ./prisma-postgres-worker初始 src/index.ts 文件目前包含简单的请求处理程序:
export default {
async fetch(request, env, ctx): Promise<Response> {
return new Response("Hello World!");
},
} satisfies ExportedHandler<Env>;在此步骤中,你将使用 CLI 设置 Prisma ORM 和 Prisma Postgres 数据库。然后创建并执行辅助脚本,在数据库中创建表并生成 Prisma 客户端以查询它。
将 Prisma CLI 安装为开发依赖项:
npm i -D prismayarn add -D prismapnpm add -D prismabun add -d prisma安装 Prisma Accelerate 客户端扩展 ↗,Prisma Postgres 需要它:
npm i @prisma/extension-accelerateyarn add @prisma/extension-acceleratepnpm add @prisma/extension-acceleratebun add @prisma/extension-accelerate安装 dotenv-cli 包 ↗ 以从 .dev.vars 加载环境变量:
npm i -D dotenv-cliyarn add -D dotenv-clipnpm add -D dotenv-clibun add -d dotenv-cli在应用中初始化 Prisma:
npx prisma@latest init --dbyarn dlx prisma@latest init --dbpnpx prisma@latest init --db如果你还没有 Prisma Data Platform ↗ 账户,或未登录,命令将提示你使用可用的身份验证提供商登录。浏览器窗口将打开以便登录或创建账户。完成此步骤后返回 CLI。
登录后(或如果已登录),CLI 将提示你选择项目名称和数据库区域。
命令终止后,它将创建:
- Platform Console ↗ 中的项目,包含 Prisma Postgres 数据库实例。
- 包含
schema.prisma的prisma文件夹,你将在其中定义数据库架构。 - 项目根目录中的
.env文件,包含 Prisma Postgres 数据库 URLDATABASE_URL=<your-prisma-postgres-database-url>。
注意 Cloudflare Workers 不支持 .env 文件。你将使用名为 .dev.vars 的文件代替刚创建的 .env 文件。
将应用根目录中的 .env 文件重命名为 .dev.vars 文件:
mv .env .dev.vars打开 prisma 文件夹中的 schema.prisma 文件,向数据库添加以下 User 模型:
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id Int @id @default(autoincrement())
email String
name String
}接下来,向 package.json 的 scripts 部分添加以下辅助脚本:
"scripts": {
"migrate": "dotenv -e .dev.vars -- npx prisma migrate dev",
"generate": "dotenv -e .dev.vars -- npx prisma generate --no-engine",
"studio": "dotenv -e .dev.vars -- npx prisma studio",
// Additional worker scripts...
}运行迁移脚本以将更改应用到数据库:
npm run migrate提示时,提供迁移名称(例如 init)。
这些步骤完成后,Prisma ORM 已完全设置并连接到你的 Prisma Postgres 数据库。
修改 src/index.ts 文件并用以下代码替换其内容:
import { PrismaClient } from "@prisma/client/edge";
import { withAccelerate } from "@prisma/extension-accelerate";
export interface Env {
DATABASE_URL: string;
}
export default {
async fetch(request, env, ctx): Promise<Response> {
const path = new URL(request.url).pathname;
if (path === "/favicon.ico")
return new Response("Resource not found", {
status: 404,
headers: {
"Content-Type": "text/plain",
},
});
const prisma = new PrismaClient({
datasourceUrl: env.DATABASE_URL,
}).$extends(withAccelerate());
const user = await prisma.user.create({
data: {
email: `Jon${Math.ceil(Math.random() * 1000)}@gmail.com`,
name: "Jon Doe",
},
});
const userCount = await prisma.user.count();
return new Response(`\
Created new user: ${user.name} (${user.email}).
Number of users in the database: ${userCount}.
`);
},
} satisfies ExportedHandler<Env>;运行开发服务器:
npm run dev访问 https://localhost:8787 ↗ 查看应用显示以下输出:
Number of users in the database: 1每次刷新页面都会创建新用户。显示的数字每次刷新递增 1,因为它返回数据库中的用户总数。
应用部署到 Cloudflare 时,需要访问在 .dev.vars 中本地定义的 DATABASE_URL 环境变量。你可以使用 npx wrangler secret put 命令将 DATABASE_URL 上传到部署环境:
npx wrangler secret put DATABASE_URL提示时,粘贴 DATABASE_URL 值(来自 .dev.vars)。如果已通过 Wrangler CLI 登录,你会看到提示询问是否要创建新 Worker。选择 "yes" 确认:
✔ There doesn't seem to be a Worker called "prisma-postgres-worker". Do you want to create a new Worker with that name and add secrets to it? … yes然后执行以下命令将项目部署到 Cloudflare Workers:
npm run deploywrangler CLI 将打包并上传你的应用。
如果尚未登录,wrangler CLI 将打开浏览器窗口提示你登录 Cloudflare 仪表板。
部署完成后,访问部署输出中提供的实时 URL(如 https://{PROJECT_NAME}.workers.dev)验证部署。如果遇到问题,请确保 secrets 已正确添加并检查部署日志中的错误。
恭喜!你已成功使用 Prisma Postgres 和 Cloudflare Workers 构建并部署了一个简单应用。
要进一步增强应用:
- 为查询添加缓存 ↗。
- 探索 Prisma Postgres 文档 ↗。
要了解如何使用 Cloudflare Workers 和 Prisma Postgres 构建实时应用,请阅读此指南 ↗。