From af807eeb53e2e8908c253b870bc36b1d2d85cd80 Mon Sep 17 00:00:00 2001 From: imbytecat Date: Thu, 22 Jan 2026 15:56:00 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E8=BF=9E=E6=8E=A5=E7=AE=A1=E7=90=86=E4=B8=8E?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E6=8E=A5=E5=85=A5=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 优化数据库连接管理,直接使用获取数据库实例的函数并传入是否为无服务器环境的标识。 - 统一使用db中间件替代dbProvider,简化数据库连接处理并保持代码一致性。 - 添加数据库实例的单例获取机制并定义类型接口 --- apps/server/src/api/middlewares/db.ts | 22 +++------------------- apps/server/src/api/routers/todo.ts | 20 +++++++++----------- apps/server/src/db/index.ts | 15 +++++++++++++++ 3 files changed, 27 insertions(+), 30 deletions(-) diff --git a/apps/server/src/api/middlewares/db.ts b/apps/server/src/api/middlewares/db.ts index 01d55ce..6a904a6 100644 --- a/apps/server/src/api/middlewares/db.ts +++ b/apps/server/src/api/middlewares/db.ts @@ -1,29 +1,13 @@ import { os } from '@orpc/server' -import { createDb } from '@/db' +import { getDb } from '@/db' const IS_SERVERLESS = false // TODO: 这里需要优化 -let globalDb: ReturnType | null = null - -function getDb() { - if (IS_SERVERLESS) { - return createDb() - } - - if (!globalDb) { - globalDb = createDb() - } - - return globalDb -} - -export const dbProvider = os.middleware(async ({ context, next }) => { - const db = getDb() - +export const db = os.middleware(async ({ context, next }) => { return next({ context: { ...context, - db, + db: getDb(IS_SERVERLESS), }, }) }) diff --git a/apps/server/src/api/routers/todo.ts b/apps/server/src/api/routers/todo.ts index 9ebe8ab..580b4d5 100644 --- a/apps/server/src/api/routers/todo.ts +++ b/apps/server/src/api/routers/todo.ts @@ -1,20 +1,18 @@ import { ORPCError } from '@orpc/server' import { eq } from 'drizzle-orm' -import { dbProvider } from '@/api/middlewares' +import { db } from '@/api/middlewares' import { os } from '@/api/server' import { todoTable } from '@/db/schema' -export const list = os.todo.list - .use(dbProvider) - .handler(async ({ context }) => { - const todos = await context.db.query.todoTable.findMany({ - orderBy: (todos, { desc }) => [desc(todos.createdAt)], - }) - return todos +export const list = os.todo.list.use(db).handler(async ({ context }) => { + const todos = await context.db.query.todoTable.findMany({ + orderBy: (todos, { desc }) => [desc(todos.createdAt)], }) + return todos +}) export const create = os.todo.create - .use(dbProvider) + .use(db) .handler(async ({ context, input }) => { const [newTodo] = await context.db .insert(todoTable) @@ -29,7 +27,7 @@ export const create = os.todo.create }) export const update = os.todo.update - .use(dbProvider) + .use(db) .handler(async ({ context, input }) => { const [updatedTodo] = await context.db .update(todoTable) @@ -45,7 +43,7 @@ export const update = os.todo.update }) export const remove = os.todo.remove - .use(dbProvider) + .use(db) .handler(async ({ context, input }) => { await context.db.delete(todoTable).where(eq(todoTable.id, input.id)) }) diff --git a/apps/server/src/db/index.ts b/apps/server/src/db/index.ts index 4da3faa..4d5e3c9 100644 --- a/apps/server/src/db/index.ts +++ b/apps/server/src/db/index.ts @@ -11,3 +11,18 @@ export function createDb() { schema, }) } + +export type Db = ReturnType + +export const getDb = (() => { + let db: Db | null = null + + return (serverless: boolean = false) => { + if (serverless) { + return createDb() + } + + db ??= createDb() + return db + } +})()