首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript/typescript | class-validator |自定义验证修饰符|重写`validator`方法中的`validationOptions`

javascript/typescript | class-validator |自定义验证修饰符|重写`validator`方法中的`validationOptions`
EN

Stack Overflow用户
提问于 2021-05-10 19:13:10
回答 1查看 763关注 0票数 4

考虑Custom validation decorators小节中提供的示例

代码语言:javascript
复制
// 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
        },
      },
    });
  };
}
代码语言:javascript
复制
// 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;
}

如何在validator方法中有条件地设置/覆盖message字符串?这可能吗?

EN

回答 1

Stack Overflow用户

发布于 2021-05-10 21:32:07

找到了:

代码语言:javascript
复制
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
      },
    });
  };
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67469422

复制
相关文章

相似问题

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