將 Prisma Postgres 與 Deno Deploy 整合
Deno Deploy 包含一項功能,允許您直接在該平台內配置 Prisma Postgres 資料庫。本指南將示範如何透過一個記錄 HTTP 請求到資料庫的最小 Deno 應用程式,將 Prisma Postgres 整合到 Deno Deploy 專案中。
閱讀完本指南後,您將擁有一個已部署的 Deno 應用程式,該程式使用 runtime = "deno" 的 Prisma Client,並可讀寫部署在 Deno Deploy 中的 Prisma Postgres 資料庫。
先決條件
- 一個 Deno Deploy 帳號
- 已安裝 Deno 執行環境(安裝指南)
- VS Code 的 Deno 擴充功能
1. 建立並設定新的 Deno 專案
使用 deno init 指令建立一個新的 Deno 專案,這會產生包含主要進入點檔案和設定的基本專案結構。
deno init prisma-postgres-deno-deploy
cd prisma-postgres-deno-deploy
1.1 為 Deno 設定 VS Code
為了確保 VS Code 將此識別為 Deno 專案並提供正確的 TypeScript 驗證,您需要初始化工作區。否則,VS Code 在使用 Deno.serve 等 Deno 特有 API 時會顯示錯誤。
安裝 VS Code 的 Deno 擴充功能,然後
- 選擇 View > Command Palette (或在 macOS 上按
Cmd+Shift+P,在 Windows 上按Ctrl+Shift+P) - 執行指令 Deno: Initialize Workspace Configuration
1.2 建立一個基本的 HTTP 伺服器
更新 main.ts 檔案以建立一個簡單的 HTTP 伺服器,回應 "Hello, World!",在增加資料庫功能之前先為您的應用程式建立基礎。
function handler(_req: Request): Response {
return new Response("Hello, World!");
}
Deno.serve(handler);
您可以透過執行以下指令在本地測試伺服器
deno run dev
在瀏覽器中訪問 localhost:8000 以查看應用程式運行情況。
1.3 將初始專案推送到 GitHub
為了將您的專案連接到 Deno Deploy 並獲取資料庫連接字串,您需要進行一次成功的部署。請建立一個 GitHub 儲存庫並將您的專案推送至該處。
2. 將專案部署到 Deno Deploy
將您的儲存庫部署到 Deno Deploy。後續的任何提交都會觸發自動重新部署。您現在需要進行部署,因為資料庫字串需要成功的部署才能產生。
- 前往 Deno Deploy 儀表板 並選擇 New App
- 按照 GitHub 的提示設定 GitHub 應用程式權限
- 在 Deno Deploy 介面中選擇您的 GitHub 儲存庫
- 點擊 Create App 以完成部署
應用程式將自動部署。
3. 配置 Prisma Postgres 資料庫
在 Deno Deploy 中配置 Prisma Postgres 資料庫,並將其連接到您的應用程式
- 前往 Deno Deploy 儀表板中的 Databases 部分
- 選擇 Provision Database 並選擇 Prisma Postgres
- 完成資料庫配置並確認配置
- 點擊 Assign 並選擇您的應用程式
- 複製 Production connection string(生產環境連接字串)
- 將連接字串加入您的
.env檔案
DATABASE_URL="postgresql://<username>:<password>@db.prisma.io:5432/<database_name>-production"
4. 設定 Prisma ORM
4.1 啟用環境變數
為了在本地開發期間存取資料庫連接字串,請設定 Deno 使用 --env-file 標誌從您的 .env 檔案載入環境變數。
更新 deno.json 中的 dev 任務
{
"tasks": {
"dev": "deno run --watch --env-file main.ts"
}
}
4.2 初始化 Prisma 並建立 schema
安裝 Prisma Client、PostgreSQL 配接器和開發依賴項
deno install npm:@prisma/client npm:@prisma/adapter-pg npm:pg npm:prisma npm:@types/pg
在您的專案中初始化 Prisma,這會建立必要的設定檔和資料夾結構,以定義您的資料庫模型。
npx prisma init
使用這些變更更新 Prisma schema
- 將 client 輸出從
prisma-client-js變更為prisma-client。 - 加入 Deno 執行環境設定。(這是 Deno 正常運作所必需的)
- 加入用於儲存請求資訊的 Log 模型。
generator client {
provider = "prisma-client"
output = "../generated/prisma"
runtime = "deno"
}
datasource db {
provider = "postgresql"
}
model Log {
id Int @id @default(autoincrement())
level Level
message String
meta Json
}
enum Level {
Info
Warn
Error
}
4.3 產生並套用遷移
遷移會根據您的 Prisma schema 建立實際的資料庫表格。此指令會產生 SQL 遷移檔案並對您的資料庫執行它們,從而建立具有指定欄位的 Log 表格。
deno run -A npm:prisma migrate dev --name init
deno run -A npm:prisma generate
5. 更新應用程式以使用 Prisma
現在資料庫已設定完畢,請更新您的應用程式以與其互動。此實作建立了一個記錄系統,可擷取每個 HTTP 請求、將其儲存在資料庫中,並以 JSON 格式回傳該記錄項目。
import { PrismaClient } from "./generated/prisma/client.ts";
import { PrismaPg } from "npm:@prisma/adapter-pg";
import process from "node:process";
const adapter = new PrismaPg({
connectionString: process.env.DATABASE_URL,
});
const prisma = new PrismaClient({
adapter,
});
async function handler(request: Request) {
const url = new URL(request.url);
if (url.pathname === "/favicon.ico") {
return new Response(null, { status: 204 });
}
const log = await prisma.log.create({
data: {
level: "Info",
message: `${request.method} ${request.url}`,
meta: {
headers: JSON.stringify(request.headers),
},
},
});
const body = JSON.stringify(log, null, 2);
return new Response(body, {
headers: { "content-type": "application/json; charset=utf-8" },
});
}
Deno.serve(handler);
透過執行以下指令在本地測試應用程式
deno run dev
它可能會要求存取您的環境變數。選擇 Allow 以授予存取權限。
在瀏覽器中訪問 localhost:8000 以查看應用程式運行情況。您應該會看到包含記錄項目的 JSON 回應。
{
"id": 1,
"level": "Info",
"message": "GET https://:8000/",
"meta": {
"headers": "..."
}
}
6. 部署應用程式
建置指令必須產生 Prisma Client 程式碼,以確保它在生產環境中可用。
6.1 在 Deno Deploy 中更新建置指令
- 前往 Deno Deploy 中的應用程式並點擊 Settings
- 在 Build configuration 下,點擊 Edit 並將
deno run -A npm:prisma generate加入建置指令 - 點擊 Save
6.2 將變更推送到 GitHub
提交並推送您的變更以觸發自動部署
git add .
git commit -m "added prisma"
git push
回到 Deno Deploy,您應該會看到成功的建置。部署完成後,點擊儀表板右上角的部署 URL。
6.3 驗證部署
當您訪問部署後的應用程式時,您應該會看到類似這樣的回應
{
"id": 1,
"level": "Info",
"message": "GET https://prisma-postgres-deno-deploy.<org-name>.deno.net/",
"meta": {
"headers": "{}"
}
}
恭喜!您已完成任務。每次重新整理頁面時,資料庫中都會建立一個新的記錄項目。
後續步驟
現在您已經擁有一個連接到 Prisma Postgres 資料庫的可運作 Deno 應用程式,您可以:
- 增強資料模型 - 為您的 Prisma schema 加入關係、驗證和索引
- 保護 API 安全 - 實作身份驗證、速率限制和正確的錯誤處理
- 改進部署 - 為生產環境設定 CI/CD、監控和資料庫備份
更多資訊
與 Prisma 保持聯繫
透過以下方式與我們聯繫,繼續您的 Prisma 旅程: 我們的活躍社群。保持資訊靈通、參與其中,並與其他開發者合作
- 在 X 上關注我們 以獲取公告、現場活動和實用技巧。
- 加入我們的 Discord 提出問題、與社群對話,並透過對話獲得積極支援。
- 在 YouTube 上訂閱 查看教學、演示和直播。
- 在 GitHub 上交流 透過為存放庫加星標、報告問題或為 issue 做出貢獻。