gpt4 book ai didi

javascript/ typescript |类验证器 |自定义验证装饰器 |覆盖 `validationOptions` 方法内的 `validator`

转载 作者:行者123 更新时间:2023-12-04 13:52:52 24 4
gpt4 key购买 nike

考虑 Custom validation decorators 部分中提供的示例:

// Decorator definition


import { registerDecorator, ValidationOptions, ValidationArguments } from 'class-validator';

export function IsLongerThan(property: string, validationOptions?: ValidationOptions) {
return function (object: Object, propertyName: string) {
registerDecorator({
name: 'isLongerThan',
target: object.constructor,
propertyName: propertyName,
constraints: [property],
options: validationOptions,
validator: {
validate(value: any, args: ValidationArguments) {
const [relatedPropertyName] = args.constraints;
const relatedValue = (args.object as any)[relatedPropertyName];
return typeof value === 'string' && typeof relatedValue === 'string' && value.length > relatedValue.length; // you can return a Promise<boolean> here as well, if you want to make async validation
},
},
});
};
}
// Decorator usage


import { IsLongerThan } from './IsLongerThan';

export class Post {
title: string;

@IsLongerThan('title', {
/* you can also use additional validation options, like "groups" in your custom validation decorators. "each" is not supported */
message: 'Text must be longer than the title',
})
text: string;
}
如何设置/覆盖 message字符串有条件地,在 validator 内方法?这可能吗?

最佳答案

找到了:



export function IsLongerThan(property: string, validationOptions?: ValidationOptions) {
return function (object: Object, propertyName: string) {

let message;

const validate = function (value: any, args: ValidationArguments) {
// Set message based on some validation logic
// message = ...
}

const defaultMessage = function () {
return message;
}

registerDecorator({
name: 'isLongerThan',
target: object.constructor,
propertyName: propertyName,
constraints: [property],
options: validationOptions,
validator: {
validate,
defaultMessage
},
});
};
}

关于javascript/ typescript |类验证器 |自定义验证装饰器 |覆盖 `validationOptions` 方法内的 `validator`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67469422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com