NestJS/TypeORM:自定义存储库可以从另一个项目中的另一个自定义存储库扩展吗?

问题描述

错误

RepositoryNotFoundError:未找到“UserQueryRepository”的存储库。看起来这个实体没有在当前的“认”连接中注册

版本

  • @nestjs/typeorm - 7.1.5
  • @nestjs/common - 7.6.15
  • @nestjs/core - 7.6.15
  • nodejs - 12.21.0
  • typeorm - 0.2.34

问题描述

我有 2 个项目:common & microservice-1

通用包有 QueryService 和 QueryRepository,并且 microservice-1 应该从这些文件中扩展。

所以在 microservice-1 中,我有从 QueryService 扩展的 UserQueryService 和从 QueryRepository 扩展的 UserQueryRepository。

query.repository.ts

import { FindManyOptions,Repository } from 'typeorm';

export class QueryRepository<Entity> extends Repository<Entity> {
  findAll(options?: FindManyOptions<Entity>): Promise<Entity[]> {
    return this.find(options);
  }
}

query.service.ts

import { FindManyOptions } from 'typeorm';
import { QueryRepository } from '../repository';

export class QueryService<Entity> {
  constructor(protected readonly repository: QueryRepository<Entity>) {}

  findById(id: string): Promise<Entity> {
    return this.repository.findOne(id);
  }

  findAll(options?: FindManyOptions<Entity>): Promise<Entity[]> {
    return this.repository.findAll(options);
  }
}

user.query.repository.ts

import { QueryRepository } from '@project/common';
import { EntityRepository,Repository } from 'typeorm';
import { UserEntity } from '../entity';

@EntityRepository(UserEntity)
export class UserQueryRepository
  extends QueryRepository<UserEntity> { // -> throws error
  // extends Repository<UserEntity> { // -> works without extending from common
}

user.query.service.ts

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { QueryService } from '@project/common';
import { UserEntity } from '../entity';
import { UserQueryRepository } from '../repository';

@Injectable()
export class UserQueryService extends QueryService<UserEntity> {
  constructor(
    @InjectRepository(UserQueryRepository)
    repository: UserQueryRepository,) {
    super(repository);
  }

  getAllUsers(): Promise<UserEntity[]> {
    return this.findAll();
  }
}

user.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserController } from '../controller';
import { UserQueryRepository } from '../repository';
import { UserQueryService } from '../service';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',host: 'localhost',port: 5432,username: 'user',password: 'pass',database: 'dbname',autoLoadEntities: true,synchronize: true,}),TypeOrmModule.forFeature([UserQueryRepository]),],controllers: [UserController],providers: [UserQueryService],})
export class UserModule {}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)