使用 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
}
}
}
}
假设我有这个 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
}
}
}
}