使用接口传入请求的 NestJS 类验证器

Posted

技术标签:

【中文标题】使用接口传入请求的 NestJS 类验证器【英文标题】:NestJS class-validators on incoming requests using interface 【发布时间】:2021-12-10 07:44:15 【问题描述】:

我需要通过 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 类:

@IsEnum(Languages)
  languages: Languages[];

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

【问题讨论】:

您可以在其中使用接口,但您需要将一些具体的类传递给class-validator。见:***.com/a/53786899/5290447 【参考方案1】:

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

首先,接口不能直接使用。由 class-validators issue here正式声明

这就是我所做的:

    将接口更改为单独的类并添加对其属性的验证
class ExperienceDto 
  @IsEnum(Fields)
  field: Fields;
  @IsNumber()
  years: number;

    然后使用这个类作为类型来验证ACTUAL DTO CLASS(不是上面那个)中的对象数组
  @ArrayNotEmpty()
  @ArrayMinSize(1)
  @ArrayMaxSize(3)
  @ValidateNested( each: true )
  @Type(() => ExperienceDto) // imported from class-transformer package
  experience: ExperienceDto[];

【讨论】:

以上是关于使用接口传入请求的 NestJS 类验证器的主要内容,如果未能解决你的问题,请参考以下文章

在nestjs中使用类验证器验证可选参数?

typescript.-如何使用类验证器和类转换器(Nestjs)验证子类中的特定字段

NestJS:转换响应

如何在 NestJS 控制器处理程序的请求中获取“已验证的正文”和“已验证的用户”?

尝试安装类验证器和类转换器时,NestJS“警告 EBADENGINE 不支持的引擎 @angulardevkit”

NestJS 类验证器验证表单数据中的数字数组