【问题标题】:How to solve un-instantiated property that should be an Injectable class in NestJs application?如何解决在 NestJs 应用程序中应该是 Injectable 类的未实例化属性?
【发布时间】:2021-06-23 09:36:47
【问题描述】:

该项目有两个模块,其中:

  1. UserModule 处理用户的所有操作,它有一个名为UserDepot 的类型存储库提供程序,它依赖于Sequelize 库的User 模型。
    @Module({
      imports: [
        SequelizeModule.forFeature([User])
      ],
      providers: [UserDepot],
      exports: [
        UserDepot
      ]
    })
    export class UserModule {
    }
  1. RegistrationModule 负责注册过程,该模块导入 UserModule 以便使用UserDepot
    @Module({
      imports: [
        UserModule,
        MessagingModule,
        AuthenticationModule
      ],
      providers: [
        RegistrationService
      ],
      controllers: [
        RegistrationController
      ]
    })
    export class RegistrationModule {
    }

在 RegistrationController 中有一个电话注册端点,其中有一个验证管道,用于检查电话号码是否在数据库中不存在。

  @Post("phone")
  async phone(
    @Body(ValidationPipe, UniquePhoneValidatorPipe) dto: PhoneRegistrationDto
  ) {
    return await this.service.handlePhoneRegistration(dto.phone);
  }

验证管道通过以下代码检查是否存在:

  constructor(private readonly users: UserDepot) {
  }

  async transform(dto: PhoneRegistrationDto, _: ArgumentMetadata) {
    if (await this.isNotUniquePhone(dto.phone)) {
      throw new ConflictException("Phone number already exists");
    }

    return dto;
  }

  private async isNotUniquePhone(phone: string): Promise<boolean> {
    return !(await this.users.existByPhone(phone));
  }

问题
调用端点时,会抛出带有引用消息的异常:

[ExceptionHandler] 无法读取未定义的属性“existByPhone”

就像nest 没有实例化UserDepot 的实例。

  • 依赖不是问题,因为项目在编译时运行没有错误(npm run start:dev)
  • UserDepot 装饰有@Injectable
    @Injectable()
    export class UserDepot {
      constructor(
        @InjectModel(User)
        private readonly users: typeof User
      ) {
      }
    }
  • UserDepot 已正确导入(据我所知)

【问题讨论】:

    标签: typescript nestjs


    【解决方案1】:

    问题出在我的验证管道中,其中缺少@Injectable() decotator 的类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-08
      • 2021-06-10
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多