既然你准备好了,那我们就来实战一下! 接下来的这个示例将展示 Bun + ElysiaJS 的强大之处。ElysiaJS 是目前 Bun 生态中性能最强、且对 TypeScript 支持最完美的 Web 框架(类似于 Express 或 Fastify,但速度快得多)。 我们将构建一个简单的 API,它不仅能处理请求,还能自动进行参数校验和类型推导。 🚀 实战:构建第一个 Bun + ElysiaJS 高性能 API

  1. 初始化项目 打开终端,执行以下命令: mkdir bun-api-demo cd bun-api-demo bun init -y # 快速初始化,跳过问答 bun add elysia # 安装 Elysia 框架

  2. 编写服务器代码 (src/index.ts) 创建一个 src 文件夹并在其中创建 index.ts。 Elysia 的神奇之处在于它内置了名为 t 的模式验证库。通过它,你定义了验证规则后,TypeScript 的类型定义也就自动生成了。 // src/index.ts import { Elysia, t } from ‘elysia’;

const app = new Elysia() // 1. 基础路由:Hello World .get(’/’, () => ‘Hello from Bun + Elysia! 🦊’)

// 2. 带参数和校验的路由 // 我们要求:id 必须是数字,query 中必须包含 name .get(‘/user/:id’, ({ params: { id }, query: { name } }) => { // 这里不需要写类型注解,TS 自动知道 id 是 number, name 是 string return { id, name, message: User ${name} has ID: ${id}, timestamp: Date.now() }; }, { // 校验层(Schema Validation) params: t.Object({ id: t.Numeric() // 自动将字符串转换为数字,并校验 }), query: t.Object({ name: t.String() }) })

// 3. POST 请求示例 .post(‘/login’, ({ body }) => { return { status: ‘success’, user: body.username }; }, { body: t.Object({ username: t.String(), password: t.String() }) })

.listen(3000);

console.log(🦊 Elysia is running at ${app.server?.hostname}:${app.server?.port});

// 导出类型,供前端或测试客户端使用(这是 Elysia 的杀手级特性) export type App = typeof app;

  1. 运行服务器 在终端运行: bun —watch src/index.ts

现在你可以打开浏览器访问 http://localhost:3000/user/123?name=Gemini,你会看到返回的 JSON 数据。如果把 123 改成 abc,服务器会自动返回 400 错误,告诉你参数验证失败。 ✨ 为什么这是“最佳实践”? (Elysia 的魔法) 如果你在这个项目中再创建一个客户端文件(比如 client.ts)来调用刚才的 API,你会看到惊人的效果: 安装客户端工具: bun add @elysiajs/eden

编写客户端代码 (client.ts): import { edenTreaty } from ‘@elysiajs/eden’; import type { App } from ’./src/index’; // 导入刚才导出的类型

// 1. 初始化客户端,绑定后端类型 const api = edenTreaty(‘http://localhost:3000’);

// 2. 调用接口 // 注意:当你输入 .get 时,IDE 会自动提示 /user/:id // 当你输入 query 时,IDE 会提示必须传 name const { data, error } = await api.user[123].get({ $query: { name: “BunDeveloper” } });

if (error) { console.error(error); } else { // 这里 data 的类型已经被完全推导出来了! // 不需要手动定义 interface UserResponse… console.log(data.message); }

核心价值: 后端写好验证逻辑,前端(或客户端)自动获得类型提示。这消除了前后端联调中 90% 的类型不匹配错误。

✅ 接下来我可以为你做什么? 现在的 API 还是静态数据的。为了让它成为一个完整的后端应用,我们通常需要连接数据库。 你想了解如何将 Bun 与 SQLite(使用 Drizzle ORM)集成,从而实现数据的持久化存储吗?这是目前开发体验最好的组合。