将 Prisma Postgres 与 Deno Deploy 集成
Deno Deploy 包含一项功能,允许您直接在平台内预置 Prisma Postgres 数据库。本指南演示了如何使用一个将 HTTP 请求记录到数据库中的极简 Deno 应用程序,在 Deno Deploy 项目中集成 Prisma Postgres。
完成本指南后,您将拥有一个已部署的 Deno 应用程序,它使用 Prisma Client 和 runtime = "deno",向 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 验证,您需要初始化工作区。否则,当使用 Deno.serve 等 Deno 特定 API 时,VS Code 将显示错误。
安装 VS Code 的 Deno 扩展,然后
- 选择 视图 > 命令面板 (或在 macOS 上按
Cmd+Shift+P,在 Windows 上按Ctrl+Shift+P) - 运行命令 Deno: 初始化工作区配置
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
- 将客户端输出从
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 客户端代码,以确保其在生产环境中可用。
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 上参与 加星收藏存储库、报告问题或为问题做出贡献。