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ā)布平臺,僅提供信息存儲服務。