Node.js 使用类验证器执行一些自定义异步验证

Node.js 使用类验证器执行一些自定义异步验证,node.js,nestjs,class-validator,Node.js,Nestjs,Class Validator,我想要以下dto: export class SetEntryPasswordDto { @ApiProperty() @Validate(EntryBelongsToUser) @Validate(EntryIsNotLocked) @Type(() => Number) @IsNumber() id: number; @ApiProperty() @IsString() @IsNotEmpty() @Va

我想要以下dto:

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;
}
它的问题是,我需要做一些异步验证,我想使用类验证器库来实现这一点

我的问题是:如果我在上面的代码片段中这样做,我可以确保第一个完成的是
entrysnotlocked
?如果没有,那么如何使这些验证按顺序执行

多谢各位

其他信息:

似乎有一些重要的信息

EntryBelongsToUser
entrysnotlocked
是验证器约束类。例如,其中一个如下所示:

@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({name:'entrysnotlocked',async:false})
@可注射()
导出类EntrySnotLocked实现ValidatorConstrainterFace{
建造师(
私有只读entryService:entryService,
) {}
公共异步验证(val:any,args:ValidationArguments):承诺{
//下面是一些验证逻辑
}
公共默认消息(参数:ValidationArguments):字符串{
返回“未经授权执行此操作”;
}
}

第二个看起来完全一样。所以问题是,我可以通过将
验证器约束
装饰器的
异步
选项设置为
来保证这两个函数的顺序吗?

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


请参考。

啊,真的吗?!我不知道,谢谢!我昨天做了一些测试,看起来顺序还没有改变,但是这些测试不够可靠,不管怎样,我怀疑是这样的。请让我检查一下。该死的……这是否意味着我无法使用需要查询数据库的两个验证器?我看了文件,但还是不明白。我已经编辑了我的问题,添加了更多的信息,你能看一下吗?