You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建Prisma工具类时检查环境的原因及生产环境连接疑问

Prisma 单例连接工具类的生产环境行为疑问

问题背景

查看Prisma示例时,发现作者推荐创建工具类以避免每次导入时新建连接,给出的代码如下:

import { PrismaClient } from '@prisma/client';

export const prisma = global.prisma || new PrismaClient();

if (process.env.NODE_ENV !== 'production') {
  global.prisma = prisma;
}

疑问:该代码在生产环境中是否会违背初衷,每次都新建连接?还是prisma变量在导入间会持久化,仅在非生产环境设为全局以减少导入操作?

解答

  • 生产环境不会重复创建连接:Node.js的模块系统是单例机制,模块首次导入执行后,导出的内容会被自动缓存。不管项目里多少文件导入这个工具类,prisma实例只会在第一次导入时初始化,后续导入直接复用缓存的实例,不会新建PrismaClient连接。
  • 非生产环境用全局变量的原因:开发环境中,热重载工具(比如nodemon)会频繁重启应用、重新加载模块,如果不用全局变量缓存实例,每次热重载都会新建PrismaClient,容易导致数据库连接池耗尽。而生产环境没有热重载场景,模块只会加载一次,不需要挂到全局对象上。
  • 逻辑合理性:这段代码的设计完全贴合场景——生产环境靠模块缓存保证单例,开发环境靠全局变量规避热重载的问题,最终都能实现「只创建一个PrismaClient实例」的核心目标。

内容的提问来源于stack exchange,提问作者Guido

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:24:48