nest中如何对typeorm 的repo设置总的center

问题:在nestjs 框架中使用typeorm 每一个server的entity repo都要手动写一个注入,很麻烦,10个repo和10个server如果都使用就是写100遍注入

思考:如何只写一次注入,在这个注入的实体里面调用每一个repo

step1:

对typeorm有过了解的写的熟练的朋友可以知道手动实例化的方法,DataSource.getRepository 那么我们可以先定一个数组或者对象映射,方法无所谓,根本在于如何知道你需要的实例化的所有repo和其对应的名称,我这里简单用对象来表达。

ts 复制代码
const RepoEntityMap = {
  tagEntity: TagEntity,
  fileEntity: FileEntity,
};

@Injectable()
export class RepoCenter implements OnModuleInit {
  @InjectDataSource() dataSource: DataSource;

  onModuleInit(): any {
    for (const RepoEntityMapKey of Object.keys(RepoEntityMap)) {
      this[`${RepoEntityMapKey}Repo`] = this.dataSource.getRepository(RepoEntityMap[RepoEntityMapKey]);
    }
  }
}

step2:

前一步我们手动装配了每一个repo,但是对于开发还有重要的一步,我们如何知道这个center装配了哪些repo呢?参考我前一篇typescript的文章,我们来定义ts的类型,让ts提示我们

ts 复制代码
type RepoEntityMapType = {
  [K in keyof typeof RepoEntityMap as `${K}Repo`]?: Repository<InstanceType<typeof RepoEntityMap[K]>>;
};

declare module './RepoCenter' {
  interface RepoCenter extends RepoEntityMapType {}
}

如此,短短两步,很少的代码我们就可以使用center只需在每个server注入一次就可以使用所有的repo

当然了你也可以说我可以写一个center,在center中注入每一个repo,这个当然是可以了,但是难道说在TypeOrmModule.forFeature进行注册的时候也要来一遍吗?我可以使用我前面的对象映射或者定义一个数组(形式不重要,根本在于如何知道需要哪些repo)直接复用

相关推荐
悟空瞎说2 天前
NestJS 接口设计避坑:摒弃万能用户更新接口,落地单一职责与最小权限原则
后端·nestjs
光影少年5 天前
HashRouter 和 BrowserRouter 区别、底层原理、部署差异
前端·react.js·nestjs
悟空瞎说6 天前
NestJS 12 预览版重磅来袭:全面原生 ESM 正式落地
nestjs
刚子编程17 天前
从零开始:在 Windows 服务器上部署 Node.js 项目(小白实战教程)
服务器·nestjs·pm2·windowsserver·node.js部署·caddy反向代理
CSharp精选营17 天前
从零开始:在 Windows 服务器上部署 Node.js 项目(小白实战教程)
nestjs·pm2·windowsserver·node.js部署·caddy反向代理
晓杰'19 天前
从0到1实现Balatro游戏后端(8):Skip Blind与Tag奖励机制设计与实现
后端·websocket·typescript·项目实战·nestjs·状态管理·游戏服务器
小蜜蜂dry23 天前
nestjs实战-权限二:角色模块
前端·后端·nestjs
小蜜蜂dry23 天前
nestjs实战-权限一: 菜单模块
前端·后端·nestjs
妖孽白YoonA25 天前
xlt-token v1.0.0 正式发布:NestJS / Express 一包接入的 Token 鉴权库
后端·node.js·nestjs
晓杰'1 个月前
从0到1实现Balatro游戏后端(7):Boss Blind与特殊规则实现
后端·websocket·typescript·node.js·游戏开发·项目实战·nestjs