使用接口传入请求的 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 类验证器的主要内容,如果未能解决你的问题,请参考以下文章
typescript.-如何使用类验证器和类转换器(Nestjs)验证子类中的特定字段
如何在 NestJS 控制器处理程序的请求中获取“已验证的正文”和“已验证的用户”?