NestJS class-使用接口对传入请求进行验证

NestJS class-validators on incoming requests using interface

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

界面:

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

export interface Experience {
  field: Fields;
  years: number;
}

这里是 DTO Class:

@IsEnum(Languages)
  languages: Languages[];

  experience: Experience[]; //  Not sure which decorator to use for interfaces 

好的,经过大量研究,我找到了一个解决方法:

首先,接口不能直接使用。由 class 验证者正式声明问题 here

这是我做的:

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