2024年3月12日

Prisma ORM 对边缘函数的支持现已进入预览阶段

我们很高兴地宣布,对边缘函数的支持现已进入预览阶段!现在,您可以从 Vercel 边缘函数、Vercel 边缘中间件、Cloudflare Workers 和 Cloudflare Pages 通过 Prisma ORM 访问您的数据库。立即试用

Prisma ORM Support for Edge Functions (Preview)

什么是边缘函数?

边缘函数是一种轻量级的无服务器计算形式,分布在全球各地。它们允许您尽可能靠近最终用户部署和运行您的应用程序。

边缘函数可以使您的应用更快

由于边缘函数地理分布的特性,用户和数据中心之间的距离得以缩短。这减少了请求延迟并缩短了响应时间,使边缘函数成为提高性能并显著改善应用程序用户体验的绝佳方法。

边缘函数的技术限制

Vercel 边缘函数和 Cloudflare Workers 不使用标准的 Node.js 运行时。相反,它们在 V8 隔离区 中运行代码。因此,这些边缘函数只能访问标准 Node.js API 的一小部分,并且计算资源(CPU 和内存)也受到限制。

特别是,无法自由打开 TCP 连接的限制使得从边缘函数连接到传统数据库变得困难。虽然 Cloudflare 引入了 connect() API,可以实现有限的 TCP 连接,但这仍然只允许使用与该 API 兼容的特定数据库驱动程序进行数据库访问。

注意: 在 Node.js 生态系统中,与 Cloudflare Workers 兼容的最流行的传统数据库驱动程序是用于 PostgreSQL 的 node-postgres。但是,也在进行 工作,以使 MySQL 在 node-mysql2 驱动程序中与 Cloudflare Workers 兼容。

现代数据库提供商,例如 Neon 或 PlanetScale,已经通过发布通过 HTTP 与数据库通信的 无服务器驱动程序 绕过了这一限制。

在边缘函数中使用 Prisma ORM 进行数据库访问 🎉

虽然在早期版本中可以在边缘函数中使用 Prisma ORM,但这始终需要使用 Prisma Accelerate 作为边缘函数和数据库之间的代理。

由于上述技术限制,无法“仅仅”将带有 Prisma ORM 的应用程序部署到边缘

  • 数据库访问仅适用于特定的驱动程序(无服务器驱动程序或与 Cloudflare 的 connect() 兼容的驱动程序)。这里的问题是 Prisma ORM 以前只在其查询引擎中具有内置驱动程序,因此无法使用兼容的 Node.js 驱动程序。
  • 上传到边缘函数的应用程序包的大小限制使得无法使用 Prisma ORM,因为其查询引擎太大并超过了大小限制。
  • 边缘函数仅允许访问有限的 Node.js API 集合。尽管其中一些 API 是 Prisma Client 工作所必需的,因此无法访问这些 API 需要 Prisma Client 绕过一些限制。

我们很高兴 v5.11.0 版本解除了这些限制,并支持在边缘函数中以预览版形式运行 Prisma ORM 🎉

由于最近推出的 驱动程序适配器 预览功能,开发人员现在可以将 Prisma ORM 与他们最喜欢的 Node.js 生态系统中的数据库驱动程序一起使用!

此外,我们还能够大幅减小 Prisma ORM 查询引擎的大小,使其现在可以适应边缘函数的有限运行时环境。

如何在边缘函数中使用 Prisma ORM

🔬 如果您有兴趣观看实际示例,我们整理了一个小型的 GitHub 仓库,演示了如何使用 Prisma ORM 和 Vercel 边缘函数访问您的数据库。

请继续阅读以了解如何在 Cloudflare Worker 中使用 PlanetScale 数据库启动并运行 Prisma ORM(或者查看我们的文档以使用不同的边缘部署和数据库提供商组合)。

0. 前提条件

在执行以下步骤之前,请确保您已拥有

  • 您的机器上已安装 Node.js
  • 一个 Cloudflare 账户
  • 一个正在运行的 PlanetScale 实例及其可用的连接字符串

1. 设置您的应用程序

使用 create-cloudflare-cli 初始化您的项目,并按照 CLI 向导中的步骤操作,并为提示选择默认选项

2. 设置 Prisma

导航到新目录并安装 Prisma CLI

接下来,使用以下命令在您的项目中初始化 Prisma

以上命令

  • prisma/schema.prisma 中创建了 Prisma schema 文件
  • 创建了一个 .env 文件来存储环境变量

.env 文件包含一个占位符 DATABASE_URL 环境变量。

使用连接到您的 PlanetScale 数据库的实际连接字符串更新该值。它可能看起来类似于这样

注意: 上面的连接字符串使用占位符来表示您的数据库的用户名密码名称。请务必将这些替换为您自己数据库的值。

更新您的 Prisma schema,使其如下所示

上面的 Prisma schema

  • 启用 driverAdapters 预览功能标志
  • 定义了一个 Log 模型和 Level 枚举

要将您的数据模型映射到数据库,您需要使用 prisma db push CLI 命令

这在您的数据库中创建了一个新的 Log 表,您现在可以在 PlanetScale 仪表板中查看它。

3. 编写 Cloudflare Worker 函数

在您的 wrangler.toml 文件中,添加一个 [vars] 键和您的数据库连接字符串(与之前一样,将 USERNAMEPASSWORDDATABASE 的占位符替换为您自己的 PlanetScale 实例的值)

注意: 由于这是一个演示应用程序,我们将纯连接字符串添加到 wrangler.toml 中。但是,由于此文件通常会提交到版本控制中,因此您绝不应在生产环境中这样做,因为这会公开您的数据库连接。相反,请使用 Cloudflare 的密钥配置

接下来,安装 PlanetScale 无服务器数据库驱动程序及其 驱动程序适配器

使用以下代码更新 src/index.ts 文件中的示例 Cloudflare Worker 代码片段

启动应用程序

从终端输出中,您现在可以打开指向 localhost 的 URL,或者按 b 键打开浏览器并调用 Worker 函数。

如果一切顺利,您将看到类似于这样的输出

4. 发布到 Cloudflare Workers

您现在可以通过运行以下命令部署应用程序

此命令会将您的边缘函数部署到 Cloudflare 并输出可以访问它的 URL。

试用并分享您的反馈

我们很想知道您的想法!试用使用 VercelCloudflare 的边缘部署新支持,并通过 TwitterDiscord 与我们分享您的反馈 🚀

如果您遇到任何问题,可以在此处创建错误报告。

不要错过下一篇文章!

注册 Prisma 新闻通讯