使用 class-validator 验证 class 中的一个字段

Validating one field in a class with class-validator

假设我有这个 class 基于文档中的示例 (https://github.com/typestack/class-validator#usage)

import {MinLength, MaxLength, validate} from "class-validator";

export class Post {

    @IsString()
    body: strong;

    @IsString()
    title: string;

    //...many more fields

    public async validate(){
        validate(this, { forbidUnknownValues: true, validationError: { target: false } });
    }
}

我创建了这个 class 的实例并为字段赋值。

const post = new Post()
post.body = 'body'
post.title = 'title'
// ... assign all the other fields

我想验证 post,跳过除 title 之外的所有字段的验证。除了将组分配给所有字段之外,似乎没有办法做到这一点,我不想这样做。有没有办法只验证这个单一字段?

不,不幸的是,没有一种方法可以在不分配组的情况下只验证一个字段。

我注意到 this 它对我有用。

一种解决方法是您只传递一个字段并使用 'skipMissingProperties' 选项进行验证。


const exampleModel = new ExampleModel();
exampleModel.password = '123abc'

const errors = await validate(exampleModel, { skipMissingProperties: true })

只需遍历验证错误并仅对匹配的字段进行操作。

async function validateField(obj, field) {
    try {
        await validateOrReject(obj);
    } catch (errors) {
        errors.forEach((err) => {
            if(field == err.property) {
                //do something
            }
        }
    }
}