跳至主要内容

如何在 Bun 中使用 Prisma

10 分钟

介绍

Bun 是一个快速的 JavaScript 运行时,它包含一个打包器、测试运行器和包管理器。在本指南中,你将使用 Prisma ORM 和 Prisma Postgres 数据库设置一个 Bun 项目。你将创建一个简单的 HTTP 服务器并构建一个 Bun 可执行文件用于部署。

先决条件

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。要获取你的直接连接字符串

  1. 导航到你最近创建的 Prisma Postgres 项目仪表板(例如“我的 Bun 项目”)
  2. 单击项目侧边栏中的 API Keys 选项卡
  3. 单击 Create API key 按钮
  4. 提供 API 密钥的名称并单击 Create
  5. 复制以 postgres:// 开头的连接字符串

更新你的 .env 文件,用新的连接字符串替换 DATABASE_URL

.env
DATABASE_URL="your_database_url_here"
DATABASE_URL="your_direct_connection_string_here"

2.4. 更新你的 Prisma schema

打开 prisma/schema.prisma 并更新它以包含你的数据模型

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

db.ts
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 脚本,用示例数据填充你的数据库

prisma/seed.ts
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

将以下内容添加到文件中

prisma.config.ts
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 服务器

index.ts
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 之旅: 我们的活跃社区。保持信息灵通,参与其中,并与其他开发人员协作。

我们真诚地感谢你的参与,并期待你成为我们社区的一部分!

© . This site is unofficial and not affiliated with Prisma Data, Inc.