forked from imbytecat/fullstack-starter
refactor(db): 去掉 lazy singleton,改为模块级 const db
getDB/closeDB + 可空单例是 Cloudflare Workers 场景的模式——每个请求独 立上下文、不允许模块加载期副作用。在 Bun 单进程长驻服务下这些都是冗余 的仪式,徒增心智。 改为模块级 const db: - src/server/db/index.ts 直接 export drizzle(...) 实例 - shutdown 插件用 db.$client.end() 收尾 - db.middleware.ts 跟随内部重命名以避免同名遮蔽(本身的去留放到下一 次提交)
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
import { os } from '@/server/api/server'
|
||||
import { getDB } from '@/server/db'
|
||||
import { db as dbSingleton } from '@/server/db'
|
||||
|
||||
export const db = os.middleware(async ({ context, next }) => {
|
||||
return next({
|
||||
export const db = os.middleware(async ({ context, next }) =>
|
||||
next({
|
||||
context: {
|
||||
...context,
|
||||
db: getDB(),
|
||||
db: dbSingleton,
|
||||
},
|
||||
})
|
||||
})
|
||||
}),
|
||||
)
|
||||
|
||||
+3
-18
@@ -2,24 +2,9 @@ import { drizzle } from 'drizzle-orm/postgres-js'
|
||||
import { env } from '@/env'
|
||||
import * as schema from '@/server/db/schema'
|
||||
|
||||
export const createDB = () =>
|
||||
drizzle({
|
||||
export const db = drizzle({
|
||||
connection: env.DATABASE_URL,
|
||||
schema,
|
||||
})
|
||||
})
|
||||
|
||||
export type DB = ReturnType<typeof createDB>
|
||||
|
||||
let _db: DB | null = null
|
||||
|
||||
export const getDB = (): DB => {
|
||||
_db ??= createDB()
|
||||
return _db
|
||||
}
|
||||
|
||||
export const closeDB = async () => {
|
||||
if (_db) {
|
||||
await _db.$client.end()
|
||||
_db = null
|
||||
}
|
||||
}
|
||||
export type DB = typeof db
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { closeDB } from '@/server/db'
|
||||
import { db } from '@/server/db'
|
||||
|
||||
export default () => {
|
||||
if (import.meta.dev) return
|
||||
@@ -11,9 +11,8 @@ export default () => {
|
||||
}
|
||||
exiting = true
|
||||
|
||||
// Brief delay to let srvx close the HTTP server first
|
||||
setTimeout(async () => {
|
||||
await closeDB()
|
||||
await db.$client.end()
|
||||
process.exit(0)
|
||||
}, 500)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user