如何解决在 NestJs 应用程序中应该是 Injectable 类的未实例化属性?
Posted
技术标签:
【中文标题】如何解决在 NestJs 应用程序中应该是 Injectable 类的未实例化属性?【英文标题】:How to solve un-instantiated property that should be an Injectable class in NestJs application? 【发布时间】: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
已正确导入(据我所知)
【问题讨论】:
【参考方案1】:问题出在我的验证管道中,其中缺少@Injectable()
decotator 的类。
【讨论】:
以上是关于如何解决在 NestJs 应用程序中应该是 Injectable 类的未实例化属性?的主要内容,如果未能解决你的问题,请参考以下文章