我们很高兴地宣布,对边缘函数的支持现已进入预览阶段!现在,您可以从 Vercel 边缘函数、Vercel 边缘中间件、Cloudflare Workers 和 Cloudflare Pages 通过 Prisma ORM 访问您的数据库。立即试用!
什么是边缘函数?
边缘函数是一种轻量级的无服务器计算形式,分布在全球各地。它们允许您尽可能靠近最终用户部署和运行您的应用程序。
边缘函数可以使您的应用更快
由于边缘函数地理分布的特性,用户和数据中心之间的距离得以缩短。这减少了请求延迟并缩短了响应时间,使边缘函数成为提高性能并显著改善应用程序用户体验的绝佳方法。
边缘函数的技术限制
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]
键和您的数据库连接字符串(与之前一样,将 USERNAME
、PASSWORD
和 DATABASE
的占位符替换为您自己的 PlanetScale 实例的值)
注意: 由于这是一个演示应用程序,我们将纯连接字符串添加到
wrangler.toml
中。但是,由于此文件通常会提交到版本控制中,因此您绝不应在生产环境中这样做,因为这会公开您的数据库连接。相反,请使用 Cloudflare 的密钥配置。
接下来,安装 PlanetScale 无服务器数据库驱动程序及其 驱动程序适配器
使用以下代码更新 src/index.ts
文件中的示例 Cloudflare Worker 代码片段
启动应用程序
从终端输出中,您现在可以打开指向 localhost
的 URL,或者按 b
键打开浏览器并调用 Worker 函数。
如果一切顺利,您将看到类似于这样的输出
4. 发布到 Cloudflare Workers
您现在可以通过运行以下命令部署应用程序
此命令会将您的边缘函数部署到 Cloudflare 并输出可以访问它的 URL。
试用并分享您的反馈
我们很想知道您的想法!试用使用 Vercel 或 Cloudflare 的边缘部署新支持,并通过 Twitter 或 Discord 与我们分享您的反馈 🚀
如果您遇到任何问题,可以在此处创建错误报告。
不要错过下一篇文章!
注册 Prisma 新闻通讯