太棒了!我们将这三个神器(Elysia + Drizzle + Turso)整合在一起。这个示例将展示一个完整的“用户管理”后端,实现从数据库到 API 接口的全链路闭环。 🏗️ 核心实战:全链路类型安全架构 我们将代码分为三部分:数据库定义、业务逻辑、API 服务。

  1. 定义 Schema 与 类型 (src/db/schema.ts) 利用 drizzle-zod 可以自动将数据库表转为校验模型。 bun add drizzle-zod zod

import { sqliteTable, text, integer } from “drizzle-orm/sqlite-core”; import { createInsertSchema, createSelectSchema } from “drizzle-zod”;

// 数据库表定义 export const users = sqliteTable(“users”, { id: integer(“id”).primaryKey({ autoIncrement: true }), name: text(“name”).notNull(), email: text(“email”).notNull().unique(), });

// 自动生成 Zod 校验模型 export const insertUserSchema = createInsertSchema(users); export type User = typeof users.$inferSelect;

  1. 整合 API 服务 (src/index.ts) 在这里,我们将 Elysia 的高性能路由与 Drizzle 的查询能力结合。 import { Elysia, t } from “elysia”; import { db } from ”./db”; import { users, insertUserSchema } from ”./db/schema”; import { eq } from “drizzle-orm”;

const app = new Elysia() .group(“/api/v1”, (app) => app

// 查询所有用户
.get("/users", async () => {
  return await db.select().from(users);
})

// 创建用户(使用 Zod 自动校验请求体)
.post("/users", async ({ body, set }) => {
  try {
    const newUser = await db.insert(users).values(body).returning();
    set.status = 201;
    return newUser[0];
  } catch (e) {
    set.status = 400;
    return { error: "Email already exists or invalid data" };
  }
}, {
  body: t.Object({
    name: t.String(),
    email: t.String({ format: 'email' })
  })
})

// 根据 ID 获取用户
.get("/users/:id", async ({ params: { id }, set }) => {
  const result = await db.select().from(users).where(eq(users.id, id));
  if (result.length === 0) {
    set.status = 404;
    return { error: "User not found" };
  }
  return result[0];
}, {
  params: t.Object({
    id: t.Numeric()
  })
})

) .listen(3000);

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

export type App = typeof app;

🌟 这种方案的“生产级”技巧

  1. 自动化的 DB 类型生成 由于你使用的是 Turso(远程 SQLite),在本地开发时,你可以通过 bunx drizzle-kit pull:sqlite 将远程的表结构反向拉取到本地,确保代码和数据库始终同步。
  2. 边缘函数兼容性 (Edge Ready) 如果你决定将这个 Bun 应用部署到 Cloudflare Workers 或 Fly.io:
  • Turso Client 使用的是 HTTP 连接(libSQL),不会像传统的 PostgreSQL 驱动那样因为 TCP 连接池耗尽而挂掉。
  • Bun 的启动速度极快(<10ms),非常适合处理突发流量。
  1. 性能监控 Bun 内置了高效的性能监控 API。你可以在 Elysia 中添加一个简单的中间件来记录耗时: .onRequest(({ request }) => { console.time(Request: ${request.url}); }) .onAfterResponse(() => { console.timeEnd(Request: ...); // 实际开发中可记录更详细的指标 })

📑 学习建议路线图

  • 第一周 (基础): 掌握 Bun 的 CLI 工具(bun install, bun test, bun run)。
  • 第二周 (数据层): 深入学习 Drizzle 的 Query API。它比 SQL 更好写,比传统 ORM 更快。
  • 第三周 (框架): 熟练使用 Elysia 的 Eden 插件。尝试实现一个简单的 Todo List 前后端分离项目。
  • 第四周 (部署): 尝试使用 Turso 的 Read Replicas(读取副本)功能,看看如何让你的应用在全球范围内都变快。 下一步建议: 你是否想了解如何为这个项目编写自动化测试(使用 bun:test)?在数据库应用中,如何在不破坏远程数据的情况下进行集成测试是关键。