跳转到内容
搜索文档

设置并使用 Prisma Postgres 数据库

最后更新 查看 MarkdownAgent 设置

Prisma Postgres 是托管的无服务器 PostgreSQL 数据库。它支持连接池、缓存、实时订阅和查询优化建议等功能。

在本教程中,你将学习如何:

  • 设置带有 Prisma ORM 的 Cloudflare Workers 项目。
  • 从 Prisma CLI 创建 Prisma Postgres 实例。
  • 使用 Prisma Postgres 建模数据并运行迁移。
  • 从 Workers 查询数据库。
  • 将 Worker 部署到 Cloudflare。

前提条件

要跟随本指南,请确保你具备以下条件:

  • 已安装 Node.js v18.18 或更高版本。
  • 有效的 Cloudflare 账户
  • 对安装和使用命令行界面(CLI)应用有基本了解。

1. 创建新的 Worker 项目

首先,使用 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 文件目前包含简单的请求处理程序:

src/index.tsts
export default {
	async fetch(request, env, ctx): Promise<Response> {
		return new Response("Hello World!");
	},
} satisfies ExportedHandler<Env>;

2. 在项目中设置 Prisma

在此步骤中,你将使用 CLI 设置 Prisma ORM 和 Prisma Postgres 数据库。然后创建并执行辅助脚本,在数据库中创建表并生成 Prisma 客户端以查询它。

2.1. 安装所需依赖项

将 Prisma CLI 安装为开发依赖项:

npm i -D prisma

安装 Prisma Accelerate 客户端扩展,Prisma Postgres 需要它:

npm i @prisma/extension-accelerate

安装 dotenv-cli 以从 .dev.vars 加载环境变量:

npm i -D dotenv-cli

2.2. 创建 Prisma Postgres 数据库并初始化 Prisma

在应用中初始化 Prisma:

npx prisma@latest init --db

如果你还没有 Prisma Data Platform 账户,或未登录,命令将提示你使用可用的身份验证提供商登录。浏览器窗口将打开以便登录或创建账户。完成此步骤后返回 CLI。

登录后(或如果已登录),CLI 将提示你选择项目名称和数据库区域。

命令终止后,它将创建:

  • Platform Console 中的项目,包含 Prisma Postgres 数据库实例。
  • 包含 schema.prismaprisma 文件夹,你将在其中定义数据库架构。
  • 项目根目录中的 .env 文件,包含 Prisma Postgres 数据库 URL DATABASE_URL=<your-prisma-postgres-database-url>

注意 Cloudflare Workers 不支持 .env 文件。你将使用名为 .dev.vars 的文件代替刚创建的 .env 文件。

2.3. 准备环境变量

将应用根目录中的 .env 文件重命名为 .dev.vars 文件:

mv .env .dev.vars

2.4. 应用数据库架构更改

打开 prisma 文件夹中的 schema.prisma 文件,向数据库添加以下 User 模型:

prisma/schema.prismaprisma
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.jsonscripts 部分添加以下辅助脚本:

package.jsonjson
"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 数据库。

3. 开发应用

修改 src/index.ts 文件并用以下代码替换其内容:

src/index.tsts
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,因为它返回数据库中的用户总数。

4. 将应用部署到 Cloudflare

应用部署到 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 deploy

wrangler CLI 将打包并上传你的应用。

如果尚未登录,wrangler CLI 将打开浏览器窗口提示你登录 Cloudflare 仪表板。

部署完成后,访问部署输出中提供的实时 URL(如 https://{PROJECT_NAME}.workers.dev)验证部署。如果遇到问题,请确保 secrets 已正确添加并检查部署日志中的错误。

后续步骤

恭喜!你已成功使用 Prisma Postgres 和 Cloudflare Workers 构建并部署了一个简单应用。

要进一步增强应用:

要了解如何使用 Cloudflare Workers 和 Prisma Postgres 构建实时应用,请阅读此指南

这篇文档对您有帮助吗?