我们很高兴地宣布,对边缘函数的支持已进入预览阶段!您现在可以通过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
。然而,目前也正在进行工作,以使node-mysql2
驱动程序中的MySQL兼容Cloudflare Workers。
现代数据库提供商,例如Neon或PlanetScale,通过发布通过HTTP与数据库通信的无服务器驱动程序来规避这一限制。
使用Prisma ORM在边缘函数中访问数据库 🎉
尽管在早期版本中可以在边缘函数中使用Prisma ORM,但这始终需要使用Prisma Accelerate作为边缘函数和数据库之间的代理。
由于上述技术限制,无法“直接”将带有Prisma ORM的应用程序部署到边缘。
- 数据库访问仅适用于特定驱动程序(无论是无服务器驱动程序还是与Cloudflare的
connect()
兼容的驱动程序)。这里的问题是Prisma ORM过去只在其查询引擎中内置驱动程序,因此无法使用兼容的Node.js驱动程序。 - 上传到边缘函数的应用程序包大小限制使得使用Prisma ORM变得不可能,因为其查询引擎过大,超出了大小限制。
- 边缘函数只允许访问有限的Node.js API。然而,Prisma Client需要其中一些API才能工作,因此无法访问这些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]
键和您的数据库连接字符串(像之前一样,用您自己的PlanetScale实例的值替换USERNAME
、PASSWORD
和DATABASE
的占位符)
注意: 由于这是一个演示应用,我们将纯连接字符串添加到
wrangler.toml
中。然而,由于此文件通常会被提交到版本控制,您在生产环境中绝不应这样做,因为它会公开您的数据库连接。相反,请使用Cloudflare的secrets配置。
接下来,安装PlanetScale无服务器数据库驱动程序及其驱动程序适配器
使用以下代码更新src/index.ts
文件中的示例Cloudflare Worker代码片段
启动应用程序
从终端输出中,您现在可以打开指向localhost
的URL,或按下b
键打开浏览器并调用Worker函数。
如果一切顺利,您将看到类似于以下的输出
4. 发布到Cloudflare Workers
您现在可以通过运行以下命令部署应用程序
此命令会将您的边缘函数部署到Cloudflare,并输出可以访问它的URL。
试用并分享您的反馈
我们很想听听您的想法!请尝试使用Vercel或Cloudflare进行边缘部署的新支持,并通过Twitter或Discord与我们分享您的反馈🚀
如果您遇到任何问题,可以在此处创建错误报告。
不要错过下一篇文章!
订阅Prisma新闻通讯