feat: 大量优化和bug修复

This commit is contained in:
2026-05-23 22:23:29 +08:00
parent 92b063c4c4
commit fc71e924e7
39 changed files with 1381 additions and 302 deletions
+19 -5
View File
@@ -26,18 +26,21 @@ const createMariaDbConfig = () => {
database: decodeURIComponent(url.pathname.slice(1)),
connectionLimit: 5,
connectTimeout: 15_000,
acquireTimeout: 20_000
// 正常情况下连接应立即可用;5s 内拿不到连接说明池已耗尽,快速报错优于无限挂起
acquireTimeout: 5_000
};
};
type MariaDbConfig = ReturnType<typeof createMariaDbConfig>;
/**
* 创建 Prisma Client
*
* 连接池超时设置比默认值更宽松,是因为当前数据库是远程 MySQL,
* 默认超时时间过短时 Node driver 可能还没建好 socket 就失败
*/
const prismaClientSingleton = () => {
const adapter = new PrismaMariaDb(createMariaDbConfig());
const prismaClientSingleton = (config: MariaDbConfig) => {
const adapter = new PrismaMariaDb(config);
return new PrismaClient({ adapter });
};
@@ -50,10 +53,21 @@ type PrismaClientSingleton = ReturnType<typeof prismaClientSingleton>;
*/
const globalForPrisma = globalThis as unknown as {
prisma: PrismaClientSingleton | undefined;
prismaConfigSignature: string | undefined;
};
const mariaDbConfig = createMariaDbConfig();
const prismaConfigSignature = JSON.stringify(mariaDbConfig);
/** 全项目唯一 Prisma Client 实例 */
export const prisma = globalForPrisma.prisma ?? prismaClientSingleton();
export const prisma =
globalForPrisma.prisma &&
globalForPrisma.prismaConfigSignature === prismaConfigSignature
? globalForPrisma.prisma
: prismaClientSingleton(mariaDbConfig);
// 生产环境由进程生命周期管理;开发环境缓存到全局,减少 HMR 连接泄漏
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
if (process.env.NODE_ENV !== "production") {
globalForPrisma.prisma = prisma;
globalForPrisma.prismaConfigSignature = prismaConfigSignature;
}