NodeJS NestJS存储库似乎被注入,但实际上是空的?

6jygbczu  于 2023-02-15  发布在  Node.js
关注(0)|答案(1)|浏览(124)

我目前正在用NestJS和Sequelize开发一个API,似乎在注入仓库时出现了一个问题。对于上下文,当服务调用这个.repo.findByKey时,函数未定义,程序失败,但当用VSCode的调试器检查时,proptotype内部有这个函数。
下面是一个复制的来源:

// service.ts
@Injectable()
export class Service {
  constructor(
    @Inject('REPOSITORY') private repo: IRepository
  ) {
    super();
  }

  async getByCode(code: string) {
    console.log(this.repo);                       >> [class Repository extends BaseRepository]
    console.log(this.repo.findByKey);             >> undefined

    return res = await this.repo.findByKey(code); >> this.repo.findByKey is not a function
  }
}

// repository.ts
@Injectable()
export class Repository
  extends BaseRepository
  implements IRepository
{
  constructor(
    @Inject('DATABASE_HELPER')
    databseHelper: DatabaseHelper,
    private mapper: CountryMapper,
  ) {
    super(databseHelper);
  }

  async findByKey(code: string) -> Promise<DTO> {
    ... never reached
  }
}

我找不到这个问题的根源,有黑魔 Mage 在这里帮助我吗?
根据请求,以下是模块配置:

@Module({})
export class ExampleModule {
  static register(typeClass: Type<IService>): DynamicModule {
    return {
      imports: [
        HelperModule,
        SequelizeModule.forFeature([Entity]),
      ],
      module: ExampleModule,
      providers: [
        ExampleMapper,
        {
          provide: 'REPOSITORY',
          useValue: Repository,
        },
        {
          provide: 'SERVICE',
          useClass: typeClass,
        },
      ],
      controllers: [Controller],
    };
  }
}
zbq4xfa0

zbq4xfa01#

你是在注入类本身,所以this.repo是一个从未被调用过的构造函数。

{
          provide: 'REPOSITORY',
          useValue: Repository,
        },

useValue适用于共享值,如配置对象、连接字符串等。
如果要注入类示例,需要如下配置提供程序

{
          provide: 'REPOSITORY',
          useClass: Repository, // <-- notice useClass
        },

相关问题