paper-burner/local-proxy/db/client.js

50 lines
1.0 KiB
JavaScript

/**
* Prisma 客户端单例
* 避免多个实例导致数据库连接泄漏
*/
import pkg from '@prisma/client';
const { PrismaClient } = pkg;
let prismaInstance = null;
/**
* 获取 PrismaClient 单例
* @returns {PrismaClient} PrismaClient 实例
*/
export function getPrisma() {
if (!prismaInstance) {
prismaInstance = new PrismaClient({
log: process.env.NODE_ENV === 'development'
? ['query', 'error', 'warn']
: ['error'],
});
// 优雅关闭处理
process.on('beforeExit', async () => {
await prismaInstance.$disconnect();
});
}
return prismaInstance;
}
// 导出单例实例
export const prisma = getPrisma();
/**
* 初始化数据库连接
* @returns {Promise<boolean>} 是否成功连接
*/
export async function initDatabase() {
try {
await prisma.$connect();
console.log('[Prisma] Database connected');
return true;
} catch (error) {
console.error('[Prisma] Database connection failed:', error.message);
return false;
}
}
export default prisma;