使用 Drizzle ORM 可以有效地优化 Elysia 服务器端的数据库访问。以下是一个详细的示例,展示如何在 Elysia 中集成 Drizzle ORM 并优化数据库操作:

  1. 首先,安装必要的依赖:
bun add drizzle-orm drizzle-typebox @elysiajs/swagger
  1. 创建数据库模式文件 src/schema.ts:
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
import { createId } from '@paralleldrive/cuid2';
 
export const users = sqliteTable('users', {
  id: text('id').primaryKey().$defaultFn(createId),
  username: text('username').notNull(),
  email: text('email').notNull(),
  age: integer('age')
});
  1. 在 src/index.ts 中设置 Elysia 服务器并集成 Drizzle:
import { Elysia, t } from 'elysia';
import { swagger } from '@elysiajs/swagger';
import { createInsertSchema, createSelectSchema } from 'drizzle-typebox';
import { drizzle } from 'drizzle-orm/bun-sqlite';
import { Database } from 'bun:sqlite';
import { users } from './schema';
 
// 创建数据库连接
const sqlite = new Database('sqlite.db');
const db = drizzle(sqlite);
 
// 创建 Drizzle 模式
const insertUserSchema = createInsertSchema(users);
const selectUserSchema = createSelectSchema(users);
 
const app = new Elysia()
  .use(swagger())
  .post('/users', async ({ body }) => {
    const newUser = await db.insert(users).values(body).returning().get();
    return newUser;
  }, {
    body: t.Omit(insertUserSchema, ['id']),
    response: selectUserSchema
  })
  .get('/users', async () => {
    return await db.select().from(users).all();
  }, {
    response: t.Array(selectUserSchema)
  })
  .get('/users/:id', async ({ params: { id } }) => {
    const user = await db.select().from(users).where(t.eq(users.id, id)).get();
    if (!user) throw new Error('User not found');
    return user;
  }, {
    params: t.Object({
      id: t.String()
    }),
    response: selectUserSchema
  })
  .listen(3000);
 
console.log(`🦊 Elysia is running at ${app.server?.hostname}:${app.server?.port}`);

这个示例展示了如何:

  1. 使用 Drizzle ORM 定义数据库模式。
  2. 使用 drizzle-typebox 创建类型安全的插入和选择模式。
  3. 在 Elysia 路由中使用 Drizzle 执行数据库操作。
  4. 利用 Elysia 的类型系统和 Swagger 集成来提供 API 文档。

通过这种方式,你可以在 Elysia 服务器端优化数据库访问,同时保持类型安全和代码的可读性。Drizzle ORM 提供了类型推断和高性能的查询构建器,可以显著提高开发效率和应用性能[1][3]。

此外,你还可以使用 Drizzle 的迁移工具来管理数据库架构的变更,这对于大型项目的长期维护非常有帮助。

最后,如果你想快速部署这样的应用,可以考虑使用 Railway 平台,它提供了一个预配置的模板,包含了 Bun、Elysia 和 Drizzle ORM 的设置[5]。这可以帮助你快速启动项目,并专注于业务逻辑的开发。

Citations: [1] https://elysiajs.com/integrations/drizzle [2] https://github.com/ShubhamkumarAnand/elysia-drizzle [3] https://beta.elysiajs.com/integrations/drizzle [4] http://codesandbox.io/p/github/raisiqueira/elysia-drizzle [5] https://railway.app/template/xuXPu7