使用接口对传入请求进行 NestJS 类验证器

Kar*_*mar 0 node.js typescript class-validator nestjs

我需要通过类验证器使用接口来验证传入请求正文中特定字段的传入表单。

界面:

export enum Fields {
  Full_Stack_Dev = 'full stack dev',
  Frontend_Dev = 'frontend dev',
  Backend_Dev = 'backend dev',
}

export interface Experience {
  field: Fields;
  years: number;
}
Run Code Online (Sandbox Code Playgroud)

这是DTO课程:

@IsEnum(Languages)
  languages: Languages[];

  experience: Experience[]; //  Not sure which decorator to use for interfaces 
Run Code Online (Sandbox Code Playgroud)

Kar*_*mar 6

好吧,经过大量研究后,我找到了解决此问题的方法:

首先,接口不能直接使用。由类验证器问题正式声明在这里

这就是我所做的:

  1. 将接口更改为单独的类并添加对其属性的验证
class ExperienceDto {
  @IsEnum(Fields)
  field: Fields;
  @IsNumber()
  years: number;
}
Run Code Online (Sandbox Code Playgroud)
  1. 然后使用此类作为类型来验证实际 DTO 类中的对象数组(不是上面的类)
  @ArrayNotEmpty()
  @ArrayMinSize(1)
  @ArrayMaxSize(3)
  @ValidateNested({ each: true })
  @Type(() => ExperienceDto) // imported from class-transformer package
  experience: ExperienceDto[];
Run Code Online (Sandbox Code Playgroud)