首页  编辑  

DTO嵌入对象的validation验证和Transform

Tags: /Node & JS/   Date Created:
NestJS中,嵌入对象的validation不生效,数据类型字符串没有变成number?
NestJS embed/Nest object validation not working?

验证需要注意:
export class InnerDto {
  @Type(() => Number)
  @IsNumber()
  @Transform(({value}) => parseInt(value))
  innerCode: number;
}

export class OuterDto {
  @ValidateNested()
  @Type(() => InnerDto)
  innerData: InnerDto;
}
必须同时添加 @ValidateNested和 @Type(() => InnerDto) 两行,嵌入对象的验证才会生效!
必须加了 @Transform(({value}) => parseInt(value)) ,才能把前端传递的字符串数字变成 Number 对象,否则前端只有传递 数字后端才会是数字,如果前端是字符串数字传递,那么后端也会是字符串!
如果@Transform不生效,则必须在 Controller 的方法上,添加如下注解:
@UsePipes (new ValidationPipe({ transform: true }))