TypeORM中Connection与isConnected废弃原因及代码问题问询
TypeORM Connection类与isConnected属性被废弃的原因及修复方案
废弃原因
TypeORM从0.3.x版本开始对核心连接管理逻辑做了重构:
- 原
Connection类被拆分为DataSource,目的是拆分连接管理与实体操作的职责,让代码结构更清晰、符合单一职责原则 - 原
Connection.isConnected属性被替换为DataSource.isInitialized,因为新的DataSource用initialized状态更准确描述连接初始化完成的状态
现有代码的问题
- 错误的导入路径:直接从
../../node_modules/typeorm/connection/Connection导入,这种硬编码node_modules路径的方式完全不符合规范,一旦包结构变化就会报错,正常应该从typeorm包顶级导出导入 - 使用废弃API:依赖已被标记为废弃的
Connection类和isConnected属性,后续TypeORM版本会彻底移除这些API,导致代码兼容性问题 - 冗余的连接状态判断:NestJS的
TypeOrmModule.forRoot()本身会等待数据库连接成功后才完成模块初始化,构造函数里的判断其实是多余的
修复后的代码
import { Module } from '@nestjs/common'; import { DataSource } from 'typeorm'; import { TypeOrmModule } from '@nestjs/typeorm'; @Module({ imports: [TypeOrmModule.forRoot()], exports: [TypeOrmModule], }) export class DatabaseModule { constructor(dataSource: DataSource) { if (dataSource.isInitialized) { console.log('DB connection successfully established'); } } }
额外说明
如果需要手动管理连接(比如动态创建连接),可以直接使用DataSource的initialize()和destroy()方法,这也是TypeORM官方推荐的新方式。
内容的提问来源于stack exchange,提问作者ARIJIT KUMAR
相关产品推荐
相关产品推荐

