Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 在nestjs中导入并注入类型化存储库_Typescript_Nestjs_Typeorm - Fatal编程技术网

Typescript 在nestjs中导入并注入类型化存储库

Typescript 在nestjs中导入并注入类型化存储库,typescript,nestjs,typeorm,Typescript,Nestjs,Typeorm,这件事快把我逼疯了 我有一个nestjs项目,使用typeorm,具有以下简化结构: + src + dal + entities login.entity.ts password.entity.ts + repositories login.repository.ts password.repository.ts

这件事快把我逼疯了

我有一个nestjs项目,使用typeorm,具有以下简化结构:

+ src
   + dal
        + entities
             login.entity.ts
             password.entity.ts             
        + repositories
             login.repository.ts
             password.repository.ts
        dal.module.ts
   + modules
        + security
             + services
                  login.service.ts
                  security.service.ts
             security.module.ts
   app.module.ts
   main.ts
dal定义了以下自定义存储库:

@EntityRepository(Login)
export class LoginRepository extends AbstractRepository<Login> implements ILoginRepository { }

@EntityRepository(Password)
export class PasswordRepository extends AbstractRepository<Password> implements IPasswordRepository { }
security.module.ts:

@Module({
    imports: [TypeOrmModule.forFeature([Entity1, Entity2, Entity3])],
    controllers: [],
    providers: [PasswordRepository, LoginRepository],
})
export class DalModule { }
@Module({
    imports: [TypeOrmModule.forFeature([PasswordRepository, LoginRepository])],
    controllers: [SecurityController],
    providers: [LoginService, SecurityService],
})
export class SecurityModule { }
@Module({
   imports: [
      DalModule,
      SecurityModule,
      TypeOrmModule.forRoot({
         type: 'mysql',
         port: Number(process.env.DB_PORT),
         host: process.env.DB_SERVER,
         username: process.env.DB_USERNAME,
         password: process.env.DB_PASSWORD,
         database: process.env.DB_NAME,
         entities: [__dirname + '/**/*.entity{.ts,.js}'],
         synchronize: false
      })
   ]
})
export class AppModule {}
app.module.ts:

@Module({
    imports: [TypeOrmModule.forFeature([Entity1, Entity2, Entity3])],
    controllers: [],
    providers: [PasswordRepository, LoginRepository],
})
export class DalModule { }
@Module({
    imports: [TypeOrmModule.forFeature([PasswordRepository, LoginRepository])],
    controllers: [SecurityController],
    providers: [LoginService, SecurityService],
})
export class SecurityModule { }
@Module({
   imports: [
      DalModule,
      SecurityModule,
      TypeOrmModule.forRoot({
         type: 'mysql',
         port: Number(process.env.DB_PORT),
         host: process.env.DB_SERVER,
         username: process.env.DB_USERNAME,
         password: process.env.DB_PASSWORD,
         database: process.env.DB_NAME,
         entities: [__dirname + '/**/*.entity{.ts,.js}'],
         synchronize: false
      })
   ]
})
export class AppModule {}
login.service.ts:

export class LoginService {
   constructor(
      private readonly passwordRepository: PasswordRepository,
      @InjectRepository(Login) private readonly loginRepository: LoginRepository
   ) {
       console.log(this.passwordRepository.f1);
       console.log(this.loginRepository.f2);
   }
事情是这样的:

按照现在的方式,我将按照预期在LoginService构造函数中记录
[AsyncFunction:f1]
[AsyncFunction:f2]

但是,如果从第二个参数中删除
@InjectRepository(Login)
,我将无法从第一个console.log中读取未定义的
属性“f1”。如果随后注释掉第一个console.log,则会从第二个console.log获得一个
无法读取未定义的属性'f2'

另一方面,如果我在第一个参数中添加
@InjectRepository(Password)
,我会得到一个
嵌套,它无法解析LoginService(?,LoginRepository)的依赖项。请确保索引[0]处的参数PasswordRepository在SecurityModule上下文中可用


究竟为什么会发生这种情况?我遇到了同样的问题,但我最终解决了

对于您的情况,只需将
存储库
类声明为
类型或模块
的一部分,然后导出
类型或模块

@模块({
导入:[TypeOrmModule.forFeature([PasswordRepository,LoginRepository]),
导出:[TypeOrmModule],
控制器:[SecurityController],
提供者:[登录服务,安全服务],
})
导出类安全模块{}
在其他模块中导入
SecuirtyModule
时,
LoginRepository
将可用于注入