首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用class-validator执行一些自定义异步验证

使用class-validator执行一些自定义异步验证
EN

Stack Overflow用户
提问于 2020-08-07 03:55:55
回答 1查看 1.2K关注 0票数 1

我想要以下dto:

代码语言:javascript
复制
export class SetEntryPasswordDto {
    @ApiProperty()
    @Validate(EntryBelongsToUser)
    @Validate(EntryIsNotLocked)
    @Type(() => Number)
    @IsNumber()
    id: number;

    @ApiProperty()
    @IsString()
    @IsNotEmpty()
    @Validate(PasswordMatchValidator)
    @Matches(EValidator.PASSWORD, { message: 'password is not strong enough' })
    password: string;

    @ApiProperty()
    @IsNotEmpty()
    @IsString()
    confirmPassword: string;

    @ApiProperty()
    @IsOptional()
    @IsString()
    passwordHint?: string;

    @IsNumber()
    userId: number;
}

它的问题是,我需要做一些异步验证,我想使用类验证器lib来完成这项工作。

我的问题是:如果我像上面的代码片段一样这样做,我能确定第一个完成的代码是EntryIsNotLocked吗?如果没有,那么如何让这些验证按顺序执行呢?

谢谢。

其他信息:

似乎有一些信息很重要。

EntryBelongsToUserEntryIsNotLocked是ValidatorConstraint类。例如,其中之一看起来如下所示:

代码语言:javascript
复制
@ValidatorConstraint({ name: 'EntryIsNotLocked', async: false })
@Injectable()
export class EntryIsNotLocked implements ValidatorConstraintInterface {
    constructor(
        private readonly entryService: EntryService,
    ) {}

    public async validate(val: any, args: ValidationArguments): Promise<boolean> {
        // here goes some validation logic
    }

    public defaultMessage(args: ValidationArguments): string {
        return `Unauthorized to execute this action`;
    }
}

第二个看起来完全一样。所以问题是,我是否可以通过将ValidatorConstraint装饰器的async选项设置为false来保证它们的顺序?

EN

回答 1

Stack Overflow用户

发布于 2020-08-07 22:56:10

不,你不能确定异步函数的顺序。这就是在类验证器包中使用validateSync方法的原因。您可以使用validateSync方法代替常规的validate方法来执行简单的非异步验证。

有关参考,请参阅this

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63290873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档