【问题标题】:How to combine multiple class-validator constrains in Nestjs request class?如何在 Nestjs 请求类中组合多个类验证器约束?
【发布时间】:2022-01-21 11:43:03
【问题描述】:

我有两个验证器类 NameMinLengthValidator 和 NameMaxLengthValidator

import { ValidatorConstraint, ValidatorConstraintInterface, ValidationArguments } from 'class-validator';

@ValidatorConstraint({ name: 'name', async: false })
export class NameMinLengthValidator implements ValidatorConstraintInterface {
  validate(text: string, args: ValidationArguments) {
    return !!text && 2 <= text.length;
  }

  defaultMessage(args: ValidationArguments) {
    return 'Name must be at least 2 characters.';
  }
}

@ValidatorConstraint({ name: 'name', async: false })
export class NameMaxLengthValidator implements ValidatorConstraintInterface {
  validate(text: string, args: ValidationArguments) {
    return !!text && text.length <= 12;
  }

  defaultMessage(args: ValidationArguments) {
    return 'Name must be max 12 characters.';
  }
}

我必须在我想验证这些约束的每个班级中这样做

export class MyRequest {
 @Validate(NameMinLengthValidator)
 @Validate(NameMaxLengthValidator)
 name: string;
}

我想实现类似的东西,如何结合两个验证器?

export class MyRequestCombined {
 @Validate(NameLengthValidator)
 name: string;
}

【问题讨论】:

    标签: nestjs class-validator


    【解决方案1】:

    您可以使用 NestJS 的内置函数来组合多个装饰器。 文档中的示例

    import { applyDecorators } from '@nestjs/common';
    
    export function Auth(...roles: Role[]) {
      return applyDecorators(
        SetMetadata('roles', roles),
        UseGuards(AuthGuard, RolesGuard),
        ApiBearerAuth(),
        ApiUnauthorizedResponse({ description: 'Unauthorized"' }),
      );
    }
    

    来源:https://docs.nestjs.com/custom-decorators

    【讨论】:

      猜你喜欢
      • 2020-05-20
      • 2017-08-16
      • 2021-09-24
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      相关资源
      最近更新 更多