Nest 无法解析存储库的依赖项

sun*_*aem 3 javascript node.js typescript typeorm nestjs

我的 nestjs 应用程序出错。我无法弄清楚我的代码有什么问题。我的代码是这样的

应用模块

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AdminModule } from './components/admin.modules';

@Module({
    imports: [
        AdminModule,
        TypeOrmModule.forRoot({
          type: 'postgres',
          host: process.env.DATABASE_HOST,
          username: process.env.DATABASE_USERNAME,
          password: process.env.DATABASE_PASSWORD,
          database: process.env.DATABASE_NAME,
          port: parseInt(process.env.DATABASE_PORT),
        }),
    ],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)

管理模块

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

import { Admin } from './admin.entity';
import { AdminRepository } from './admin.repository';

@Module({
    imports: [TypeOrmModule.forFeature([Admin])],
    providers: [AdminRepository],
})
export class AdminModule {}
Run Code Online (Sandbox Code Playgroud)

管理库

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';

import { RepositoryBase } from '../../common/base/repository.base';
import { Admin } from './admin.entity';

@Injectable()
export class AdminRepository extends RepositoryBase<Admin> {
    constructor(@InjectRepository(Admin) private readonly repo: Repository<Admin>) {
        super(repo);
}
Run Code Online (Sandbox Code Playgroud)

我得到的是这样的错误

错误:Nest 无法解析 AdminRepository (?) 的依赖项。请确保索引 [0] 处的参数 AdminRepository 在 AdminModule 上下文中可用。

潜在的解决方案: - 如果 AdminRepository 是一个提供者,它是否是当前 AdminModule 的一部分?- 如果 AdminRepository 是从单独的 @Module 导出的,那么该模块是否导入到 AdminModule 中?

小智 6

我认为问题在于您给提供者的名称:AdminRepository. 很可能,内部TypeOrm正在使用该名称为Admin实体创建存储库,因此名称冲突。

如果您将提供程序类重命名为其他任何名称(例如AdminRepoAdminService),错误应该会消失。或者另一件事是将实体类从重命名为Admin其他名称。

你想避免的是创建一个类 ${EntityClassName}Repository

  • 该死...保留名称应该会引发错误或其他错误。 (2认同)