【发布时间】:2021-06-23 09:36:47
【问题描述】:
该项目有两个模块,其中:
-
UserModule 处理用户的所有操作,它有一个名为
UserDepot的类型存储库提供程序,它依赖于Sequelize库的User模型。
@Module({
imports: [
SequelizeModule.forFeature([User])
],
providers: [UserDepot],
exports: [
UserDepot
]
})
export class UserModule {
}
-
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