【发布时间】:2018-07-28 19:13:42
【问题描述】:
我在我的 TypeORM 实体字段电子邮件上设置了一个自定义唯一验证器装饰器。 NestJS有依赖注入,但是服务没有注入。
错误是:
TypeError: Cannot read property 'findByEmail' of undefined
对实现自定义电子邮件验证器有任何帮助吗?
user.entity.ts:
@Column()
@Validate(CustomEmail, {
message: "Title is too short or long!"
})
@IsEmail()
email: string;
我的CustomEmail 验证器是
import {ValidatorConstraint, ValidatorConstraintInterface,
ValidationArguments} from "class-validator";
import {UserService} from "./user.service";
@ValidatorConstraint({ name: "customText", async: true })
export class CustomEmail implements ValidatorConstraintInterface {
constructor(private userService: UserService) {}
async validate(text: string, args: ValidationArguments) {
const user = await this.userService.findByEmail(text);
return !user;
}
defaultMessage(args: ValidationArguments) {
return "Text ($value) is too short or too long!";
}
}
我知道我可以在Column 选项中设置unique
@Column({
unique: true
})
但这会引发 mysql 错误和导致我的应用程序崩溃的ExceptionsHandler,所以我无法自己处理它...
谢谢!
【问题讨论】:
-
您不能在
ValidatorConstraint类中注入依赖项。它不是 Nest 容器的一部分。