我们很高兴地宣布,对 Edge Functions 的支持已进入预览阶段!您现在可以通过 Prisma ORM 从 Vercel Edge Functions、Vercel Edge Middleware、Cloudflare Workers 和 Cloudflare Pages 访问您的数据库。立即试用!
什么是 Edge Functions?
Edge Functions 是一种轻量级无服务器计算,分布在全球各地。它们允许您尽可能地将您的应用程序部署和运行在靠近最终用户的地方。

Edge Functions 可以让您的应用程序更快
由于 Edge Functions 的地理分布式特性,用户与数据中心之间的距离得以缩短。这降低了请求延迟并改善了响应时间,使 Edge Functions 成为提高性能并显著改善应用程序用户体验的绝佳方法。
Edge Functions 中的技术限制
Vercel Edge Functions 和 Cloudflare Workers 不使用标准的 Node.js 运行时。相反,它们在 V8 isolates 中运行代码。因此,这些 Edge Functions 只能访问标准 Node.js API 的一小部分,并且计算资源(CPU 和内存)也受到限制。
特别是,无法自由打开 TCP 连接的限制使得从 Edge Functions 访问传统数据库变得困难。虽然 Cloudflare 引入了 connect() API 来启用有限的 TCP 连接,但这仍然只允许使用与该 API 兼容的特定数据库驱动程序进行数据库访问。
注意: 在 Node.js 生态系统中,与 Cloudflare Workers 兼容的最流行的传统数据库驱动程序是 PostgreSQL 的
node-postgres。然而,也正在进行中的工作是使 MySQL 在node-mysql2驱动程序中与 Cloudflare Workers 兼容。
现代数据库提供商,例如 Neon 或 PlanetScale,通过发布通过 HTTP 与数据库通信的 无服务器驱动程序 来解决此限制。
使用 Prisma ORM 在 Edge Functions 中访问数据库 🎉
尽管在早期版本中可以在 Edge Functions 中使用 Prisma ORM,但这始终需要使用 Prisma Accelerate 作为 Edge Functions 和数据库之间的代理。

由于上述技术限制,无法“仅仅”将使用 Prisma ORM 的应用程序部署到边缘。
- 数据库访问仅适用于特定驱动程序(无服务器驱动程序或与 Cloudflare 的
connect()兼容的驱动程序)。这里的问题是 Prisma ORM 以前只在其查询引擎中内置驱动程序,因此无法使用兼容的 Node.js 驱动程序。 - 上传到 Edge Functions 的应用程序包的大小限制使得无法使用 Prisma ORM,因为其查询引擎太大,超出了大小限制。
- Edge Functions 只允许访问有限的 Node.js API。但是,其中一些 API 是 Prisma Client 正常工作所必需的,因此无法访问这些 API 需要 Prisma Client 解决一些限制。

我们很高兴 v5.11.0 版本解除了这些限制,并支持在 Edge Functions 中运行 Prisma ORM(预览版)🎉

得益于最近引入的 驱动程序适配器 预览功能,开发人员现在可以使用 Prisma ORM 和他们喜爱的 Node.js 生态系统中的数据库驱动程序!
此外,我们已经能够大幅减小 Prisma ORM 查询引擎的大小,使其现在可以适应 Edge Functions 有限的运行时环境。
如何在 Edge Function 中使用 Prisma ORM
🔬 如果您有兴趣查看实际示例,我们整理了一个小型 GitHub 存储库,演示了如何使用 Prisma ORM 和 Vercel Edge Functions 访问您的数据库。
请继续学习如何在 Cloudflare Worker 中使用 PlanetScale 数据库 启动和运行 Prisma ORM(或 查阅我们的文档 以使用不同的边缘部署和数据库提供商组合)。
0. 先决条件
在执行以下步骤之前,请确保您已具备:
- 您的机器上安装了 Node.js
- 一个 Cloudflare 账户
- 一个正在运行的 PlanetScale 实例,并已获取其连接字符串
1. 设置您的应用程序
使用 create-cloudflare-cli 初始化您的项目,并按照 CLI 向导中的步骤,为提示选择默认选项
2. 设置 Prisma
导航到新目录并安装 Prisma CLI
接下来,使用以下命令在您的项目中初始化 Prisma
以上命令:
- 在
prisma/schema.prisma中创建了 Prisma 模式文件 - 创建了一个
.env文件来存储环境变量
.env 文件包含一个占位符 DATABASE_URL 环境变量。
用连接到您的 PlanetScale 数据库的实际连接字符串更新该值。它可能看起来与此类似:
注意: 上面的连接字符串使用了 用户名、密码 和您的数据库 名称 的占位符。请务必将它们替换为您自己的数据库的值。
更新您的 Prisma 模式,使其如下所示:
上述 Prisma 模式:
- 启用
driverAdapters预览功能标志 - 定义一个
Log模型和Level枚举
要将数据模型映射到数据库,您需要使用 prisma db push CLI 命令
这在您的数据库中创建了一个新的 Log 表,您现在可以在 PlanetScale 控制台中查看它。
3. 编写 Cloudflare Worker 函数
在您的 wrangler.toml 文件中,添加一个 [vars] 键和您的数据库连接字符串(像之前一样,将 USERNAME、 PASSWORD 和 DATABASE 的占位符替换为您自己的 PlanetScale 实例的值)
注意: 由于这是一个演示应用程序,我们将明文连接字符串添加到
wrangler.toml中。然而,由于此文件通常会提交到版本控制中,您绝不应在生产环境中这样做,因为那会公开您的数据库连接。相反,请使用 Cloudflare 的秘密配置。
接下来,安装 PlanetScale 无服务器数据库驱动程序及其 驱动程序适配器
使用以下代码更新 src/index.ts 文件中的 Cloudflare Worker 示例代码片段:
启动应用程序
从终端输出中,您现在可以打开指向 localhost 的 URL,或者按 b 键打开浏览器并调用 Worker 函数。
如果一切顺利,您将看到类似于以下内容的输出:
4. 发布到 Cloudflare Workers
您现在可以通过运行以下命令部署应用程序:
此命令会将您的边缘函数部署到 Cloudflare,并输出可以访问它的 URL。
试用并分享您的反馈
我们很想知道您的想法!尝试使用 Vercel 或 Cloudflare 的新边缘部署支持,并通过 X 或 Discord 与我们分享您的反馈🚀
如果您遇到任何问题,可以在 此处 创建错误报告。
不要错过下一篇文章!
订阅 Prisma 新闻通讯