feat: 大量优化和bug修复
This commit is contained in:
+19
-5
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user