nestjs class-validator 數(shù)組對象的校驗

import {
  IsNumber,
  IsString,
  IsOptional,
  IsNotEmpty,
  IsArray,
} from 'class-validator';

export class DataDto {
  @IsArray()
  @ArrayNotEmpty()
  @ValidateNested({ each: true })
  @Type(() => UserDto)
  readonly list: UserDto[]
}

export class UserDto {
  @IsString()
  @IsNotEmpty()
  name: string

  @IsNumber()
  age?: number
}



import { validate } from 'class-validator';
import { plainToClass } from 'class-transformer';
import { Logger, PipeTransform, Injectable, ArgumentMetadata } from '@nestjs/common';
import { ValidationError } from '../errors/validation.error';
import { PARAMS_VALIDATION_ERROR } from '../constants/errorCode.constant';


@Injectable()
export class ValidationPipe implements PipeTransform<any> {

  async transform(value, { metatype }: ArgumentMetadata) {
    if (!metatype || !this.toValidate(metatype)) {
      return value;
    }
    const object = plainToClass(metatype, value);
    const errors = await validate(object, {forbidUnknownValues: true});
    if (errors.length > 0) {
      new Logger().warn(errors,'validationError');
      const message = errors.map(error => Object.values(error.constraints).join(';')).join(';');
      throw new ValidationError({code: PARAMS_VALIDATION_ERROR, message});
    }
    return value;
  }

  private toValidate(metatype): boolean {
    const types = [String, Boolean, Number, Array, Object];
    return !types.find(type => metatype === type);
  }
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容