2024 年 3 月 12 日

Prisma ORM 支援 Edge Functions 現已開放預覽

我們很高興宣布 Edge Functions 的支援現已開放預覽!您現在可以從 Vercel Edge Functions、Vercel Edge Middleware、Cloudflare Workers 和 Cloudflare Pages 使用 Prisma ORM 存取您的資料庫。立即試用

Prisma ORM Support for Edge Functions (Preview)

什麼是 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。

試用並分享您的意見回饋

我們很想知道您的想法!試用使用 VercelCloudflare 的 Edge 部署新支援,並透過 Twitter 或 Discord 🚀 與我們分享您的意見回饋

如果您遇到任何問題,可以在 這裡 建立錯誤報告。

不要錯過下一篇文章!

註冊 Prisma 電子報