我們很高興宣布 Edge Functions 的支援現已開放預覽!您現在可以從 Vercel Edge Functions、Vercel Edge Middleware、Cloudflare Workers 和 Cloudflare Pages 使用 Prisma ORM 存取您的資料庫。立即試用!
什麼是 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 Function 連接傳統資料庫變得困難。雖然 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 Function 中使用 Prisma ORM,但這始終需要使用 Prisma Accelerate 作為 Edge Function 和資料庫之間的代理。
由於上述技術限制,無法「直接」將具有 Prisma ORM 的應用程式部署到 Edge
- 資料庫存取僅適用於特定驅動程式(無伺服器驅動程式或與 Cloudflare 的
connect()
相容的驅動程式)。這裡的問題是 Prisma ORM 過去只在其查詢引擎中具有內建驅動程式,因此無法使用相容的 Node.js 驅動程式。 - 上傳到 Edge Function 的應用程式套件大小限制使得無法使用 Prisma ORM,因為其查詢引擎太大,超過了大小限制。
- Edge Functions 僅允許存取有限的 Node.js API。然而,Prisma Client 的運作需要其中一些 API,因此無法存取這些 API 需要 Prisma Client 繞過一些限制。
我們很高興 v5.11.0
版本 解除了這些限制,並在預覽版中啟用在 Edge Functions 中執行 Prisma ORM 🎉
感謝最近推出的 驅動程式轉接器 預覽功能,開發人員現在可以使用 Prisma ORM 和他們最喜歡的 Node.js 生態系統中的資料庫驅動程式!
此外,我們已能夠大幅縮減 Prisma ORM 查詢引擎的大小,使其現在可以放入 Edge Function 的有限執行階段環境中。
如何在 Edge Function 中使用 Prisma ORM
🔬 如果您有興趣查看實際範例,我們整理了一個小型的 GitHub 儲存庫 ,示範如何使用 Prisma ORM 和 Vercel Edge Functions 存取您的資料庫。
請按照步驟學習如何在 Cloudflare Worker 中使用 Prisma ORM 和 PlanetScale 資料庫 (或 查看我們的文件 以使用 Edge 部署和資料庫供應商的不同組合)。
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
您現在可以透過執行以下命令來部署應用程式
此命令會將您的 Edge Function 部署到 Cloudflare 並輸出可以存取的 URL。
試用並分享您的意見回饋
我們很想知道您的想法!試用使用 Vercel 或 Cloudflare 的 Edge 部署新支援,並透過 Twitter 或 Discord 🚀 與我們分享您的意見回饋
如果您遇到任何問題,可以在 這裡 建立錯誤報告。
不要錯過下一篇文章!
註冊 Prisma 電子報