如何在 Bun 中使用 Prisma
介绍
Bun 是一个快速的 JavaScript 运行时,它包含一个打包器、测试运行器和包管理器。在本指南中,你将使用 Prisma ORM 和 Prisma Postgres 数据库设置一个 Bun 项目。你将创建一个简单的 HTTP 服务器并构建一个 Bun 可执行文件用于部署。
先决条件
- 系统中已安装 Bun
- 一个 Prisma Postgres 数据库 (在设置过程中创建)
- JavaScript/TypeScript 的基础知识
1. 设置你的 Bun 项目
首先,为你的项目创建一个目录并导航到它
mkdir bun-prisma
cd bun-prisma
然后,初始化一个新的 Bun 项目
bun init -y
这将创建一个基本的 Bun 项目,其中包含一个 package.json 文件和一个 index.ts 文件。
2. 安装和配置 Prisma
2.1. 安装依赖项
安装所需的 Prisma 包和其他依赖项
bun add -d prisma @types/pg
bun add @prisma/client @prisma/adapter-pg pg
如果你使用的是其他数据库提供程序(MySQL、SQL Server、SQLite),请安装相应的驱动程序适配器包,而不是 @prisma/adapter-pg。有关更多信息,请参阅 数据库驱动程序。
2.2. 使用 Prisma Postgres 初始化 Prisma ORM
在你的项目中用 Prisma Postgres 初始化 Prisma ORM
bun prisma init --db
在设置 Prisma Postgres 数据库时,你需要回答几个问题。选择离你位置最近的区域,并为你的数据库选择一个易记的名称,如“我的 Bun 项目”
此命令创建
- 一个包含
schema.prisma文件的prisma/目录 - 一个新的 Prisma Postgres 数据库
- 一个
prisma.config.ts文件 - 一个包含你的
DATABASE_URL的.env文件
2.3. 为直接连接配置环境变量
我们将使用直接连接字符串连接到 Prisma Postgres。要获取你的直接连接字符串
- 导航到你最近创建的 Prisma Postgres 项目仪表板(例如“我的 Bun 项目”)
- 单击项目侧边栏中的 API Keys 选项卡
- 单击 Create API key 按钮
- 提供 API 密钥的名称并单击 Create
- 复制以
postgres://开头的连接字符串
更新你的 .env 文件,用新的连接字符串替换 DATABASE_URL
DATABASE_URL="your_database_url_here"
DATABASE_URL="your_direct_connection_string_here"
2.4. 更新你的 Prisma schema
打开 prisma/schema.prisma 并更新它以包含你的数据模型
generator client {
provider = "prisma-client"
output = "../generated/prisma"
}
datasource db {
provider = "postgresql"
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
}
3. 生成 Prisma 客户端并运行迁移
生成 Prisma 客户端并将你的 schema 应用到数据库
bunx --bun prisma migrate dev --name init
bunx --bun prisma generate
此命令
- 根据你的 schema 创建数据库表
- 在
generated/prisma目录中生成 Prisma 客户端
4. 设置数据库配置并创建 seed 脚本
4.1. 创建数据库工具文件
在你的项目根目录中创建一个 db.ts 文件来配置 PrismaClient
import { PrismaClient } from "./generated/prisma/client";
import { PrismaPg } from "@prisma/adapter-pg";
const adapter = new PrismaPg({
connectionString: process.env.DATABASE_URL!,
});
export const prisma = new PrismaClient({
adapter,
});
4.2. 创建 seed 脚本
在 prisma 文件夹中创建一个 seed 脚本,用示例数据填充你的数据库
import { PrismaClient } from "../generated/prisma/client";
import { PrismaPg } from "@prisma/adapter-pg";
const adapter = new PrismaPg({
connectionString: process.env.DATABASE_URL!,
});
const prisma = new PrismaClient({
adapter,
});
async function main() {
// Create multiple users
await prisma.user.createMany({
data: [
{ email: "alice@example.com", name: "Alice" },
{ email: "bob@example.com", name: "Bob" },
{ email: "charlie@example.com", name: "Charlie" },
{ email: "diana@example.com", name: "Diana" },
{ email: "eve@example.com", name: "Eve" },
{ email: "frank@example.com", name: "Frank" },
{ email: "grace@example.com", name: "Grace" },
{ email: "henry@example.com", name: "Henry" },
{ email: "isabella@example.com", name: "Isabella" },
{ email: "jack@example.com", name: "Jack" },
],
skipDuplicates: true, // prevents errors if you run the seed multiple times
});
console.log("Seed data inserted!");
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});
3.3. 将 seed 脚本添加到 Prisma Config
将以下内容添加到文件中
import 'dotenv/config'
import { defineConfig, env } from 'prisma/config';
export default defineConfig({
schema: 'prisma/schema.prisma',
migrations: {
path: 'prisma/migrations',
seed: `bun run prisma/seed.ts`
},
datasource: {
url: env('DATABASE_URL'),
},
});
运行 seed 脚本以填充你的数据库
bunx --bun prisma db seed
5. 创建你的 Bun 服务器
用以下代码替换 index.ts 文件内容,以构建一个使用 Prisma ORM 获取和显示用户的简单 HTTP 服务器
import { prisma } from './db'
const server = Bun.serve({
port: 3000,
async fetch(req) {
const { pathname } = new URL(req.url)
// Skip favicon route
if (pathname === '/favicon.ico') {
return new Response(null, { status: 204 }) // or serve an icon if you have one
}
// Return all users
const users = await prisma.user.findMany()
// Count all users
const count = await prisma.user.count()
// Format the response with JSON
return new Response(
JSON.stringify({
users: users,
totalUsers: count,
}),
{ headers: { 'Content-Type': 'application/json' } },
)
},
})
console.log(`Listening on https://:${server.port}`)
6. 运行你的应用程序
启动你的 Bun 服务器
bun run index.ts
你应该在控制台中看到 Listening on https://:3000。当你在浏览器中访问 https://:3000 时,你将看到一个 JSON 响应,其中包含数据库中的所有用户和总数。
7. 构建并运行 Bun 可执行文件
Bun 可以将你的 TypeScript 应用程序编译成单个可执行文件,这对于部署和分发很有用。
7.1. 构建可执行文件
将你的应用程序构建成可执行文件
bun build --compile index.ts
这将在你的项目目录中创建一个名为 index(在 Windows 上为 index.exe)的可执行文件。
7.2. 运行可执行文件
运行编译后的可执行文件
./index
你应该会看到相同的 Listening on https://:3000 消息,你的应用程序将与以前完全一样运行。可执行文件包含所有依赖项,可以部署到任何兼容系统,而无需安装 Bun 或 Node.js。
Bun 可执行文件对于以下情况很有用
- 部署:发布单个文件,而不是管理依赖项
- 分发:共享你的应用程序,而无需用户安装 Bun
- 性能:与运行 TypeScript 文件相比,启动时间更快
- 安全性:你的源代码已编译,不易阅读
后续步骤
你可以浏览此示例以查看使用 Bun 和 Prisma 构建的示例应用程序。
既然你已经拥有一个连接到 Prisma Postgres 数据库的 Bun 应用程序,你可以继续进行以下操作
- 使用额外的模型和关系扩展你的 Prisma schema
- 实现身份验证和授权
- 添加输入验证和错误处理
- 探索 Bun 的内置测试工具
- 将你的可执行文件部署到生产服务器
更多信息
与 Prisma 保持联系
通过以下方式与我们保持联系,继续你的 Prisma 之旅: 我们的活跃社区。保持信息灵通,参与其中,并与其他开发人员协作。
- 在 X 上关注我们 获取公告、直播活动和实用技巧。
- 加入我们的 Discord 提问、与社区交流,并通过对话获得积极支持。
- 在 YouTube 上订阅 获取教程、演示和直播。
- 在 GitHub 上参与 加星收藏存储库、报告问题或为问题做出贡献。