/** * 数据库中间件 * * 为 ORPC 处理器提供数据库连接。使用单例模式管理连接, * 避免每次请求都创建新连接。 */ import { os } from '@orpc/server' import { createDb, type Db } from '@/db' /** 全局数据库实例 (单例模式) */ let globalDb: Db | null = null /** * 获取数据库实例 * * 首次调用时创建连接,后续调用返回同一实例。 * 这种模式适合长时间运行的服务器进程。 */ function getDb(): Db { if (!globalDb) { globalDb = createDb() } return globalDb } /** * 数据库提供者中间件 * * 使用方式: * ```ts * export const list = os.todo.list * .use(dbProvider) * .handler(async ({ context }) => { * // context.db 可用 * return context.db.query.todoTable.findMany() * }) * ``` */ export const dbProvider = os.middleware(async ({ context, next }) => { const db = getDb() return next({ context: { ...context, db, }, }) })