typescript 问题NestJS/类型ORM:错误[ExceptionHandler]嵌套无法解析ProjetslaboService的依赖项(?)

cqoc49vn  于 2023-01-27  发布在  TypeScript
关注(0)|答案(1)|浏览(210)

在完全遵循以下教程之后:https://www.youtube.com/watch?v=JK5aynTxKjM&list=PL4bT56Uw3S4zIAOX1ddx8oJS6jaD43vZC
我决定做我的crud基于这一点:我用我的类别(类别)测试了TypeORM,所以只是一个简单的表,没有外键或任何东西,它的工作就像一个魅力和程序运行CRUD.我说,所以我决定做几个表,包括“ProjectsLabo”表,有两个外键.
但问题是,当我在我的模块中合并其他三个模块时,我有一个错误:错误[ExceptionHandler] Nest无法解析ProjetslaboService(?)的依赖项。请确保索引[0]处的参数ProjetslaboDtoRepository在ProjetslaboModule上下文中可用。
潜在解决方案:

  • ProjetslaboModule是否为有效的NestJS模块?
  • 如果ProjetslaboDtoRepository是提供程序,它是否是当前ProjetslaboModule的一部分?
  • 如果ProjetslaboDtoRepository是从单独的@Module导出的,那么该模块是否导入到ProjetslaboModule中?
@Module({
    imports: [ /* the Module containing ProjetslaboDtoRepository */ ]
  })

错误:Nest无法解析ProjetslaboService(?)的依赖项。请确保索引[0]处的参数ProjetslaboDtoRepository在ProjetslaboModule上下文中可用。
潜在解决方案:

  • ProjetslaboModule是否为有效的NestJS模块?
  • 如果ProjetslaboDtoRepository是提供程序,它是否是当前ProjetslaboModule的一部分?
  • 如果ProjetslaboDtoRepository是从单独的@Module导出的,那么该模块是否导入到ProjetslaboModule中?
@Module({
    imports: [ /* the Module containing ProjetslaboDtoRepository */ ]
    })

以下是LaboProjects模块的示例:

projetslabo.dto.ts

import { IsNotBlank } from "../../decorators/is-not-blank.decorator";
    export class ProjetslaboDto {
    //@IsString()
    //@IsNotEmpty()
    @IsNotBlank({message : 'Serveur : the name is not empty'})
    nom?: string;
    }

projetslabo.controller.ts

@Controller('projetslabo')
    export class ProjetslaboController {
    constructor(private readonly projetslaboService: ProjetslaboService) {
    }
    
    @Get()
    async GetAll() {
    return await this.projetslaboService.getAll();
    }
    
    @Get(':id')
    async GetOne(@Param('id', ParseIntPipe) id: number) {
    return await this.projetslaboService.findById(id);
    }
    }

projetslabo.entity.ts

@Entity({ name: 'projetslabo' })
    export class ProjetslaboEntity {
    @PrimaryGeneratedColumn()
    idProjetsLabo: number;
    
    @Column({ type: 'varchar', length: 40, nullable: false })
    nom: string;
    
    @ManyToOne(() => ValeurslaboEntity, (ValeurslaboEntity) => ValeurslaboEntity.idValeursLabo , {nullable : false})
    FK_idValeursLabo: ValeurslaboEntity
    
    @ManyToOne(() => AnneeslaboEntity, (AnneeslaboEntity) => AnneeslaboEntity.idAnneesLabo, {nullable : false})
    FK_idAnneesLabo: AnneeslaboEntity
    }

Projetslabo.module.ts

@Module({
      
    imports: [TypeOrmModule.forFeature([ProjetslaboEntity])],
    providers: [ProjetslaboService],
    controllers: [ProjetslaboController],
    })
    export class ProjetslaboModule {}

projetslabo.repository.ts

@EntityRepository(ProjetslaboEntity)
    export class ProjetslaboRepository extends Repository<ProjetslaboEntity>{}

projetslabo.service.ts

@Injectable()
    export class ProjetslaboService {
    constructor(
    @InjectRepository(ProjetslaboDto)
    private projetslaboRepository: ProjetslaboRepository,){}
    async getAll(): Promise<ProjetslaboEntity[]> {
    const list = await this.projetslaboRepository.find();
    if (!list.length) {
    throw new NotFoundException(
    new MessageDto('Serveur : La liste est vide'),
    );
    }
    return list;
    }
    async findById(idProjetsLabo: number): Promise<ProjetslaboEntity> {
    const annees = await this.projetslaboRepository.findOneBy({
    idProjetsLabo,
    });
    if (!annees) {
    throw new NotFoundException(
    new MessageDto("Serveur : Cette année n'existe pas"),
    );
    }
    return annees;
    }

app.module.ts

@Module({
    imports: [
    ConfigModule.forRoot({
    envFilePath: '.env',
    isGlobal: true,
    }),
    TypeOrmModule.forRootAsync({
    imports: [ConfigModule],
    useFactory: (configService: ConfigService) => ({
    type: 'mariadb',
    host: configService.get<string>(DB_HOST),
    port: +configService.get<number>(DB_PORT),
    username: configService.get<string>(DB_USER),
    password: configService.get<string>(DB_PASSWORD),
    database: configService.get<string>(DB_DATABASE),
    entities: [__dirname + '/**/*.entity{.ts,.js}'],
    synchronize: true,
    logging: true,
    }),
    inject: [ConfigService],
    }),
    CategoriesModule,
    /*Problem with this 3 modules
    ProjetslaboModule,
    ValeurslaboModule,
    AnneeslaboModule,
    */
    ],
    controllers: [AppController],
    providers: [AppService]
    })
    export class AppModule {}

你能帮帮我吗?雀巢/核心:9.0.0嵌套/类型:9.0.1

yqhsw0fo

yqhsw0fo1#

当你应该传递ProjetslaboEntity的时候,你把ProjetslaboDto传递给了你的@InjectRepository(),因为这是你告诉TypeOrmModule.forFeature()的。

@Injectable()
export class ProjetslaboService {
  constructor(
-    @InjectRepository(ProjetslaboDto)
+    @InjectRepository(ProjetslaboEntity)
    private projetslaboRepository: ProjetslaboRepository,){}
...

相关问题