Nestjs IsEnum dto 验证和招摇

Posted

技术标签:

【中文标题】Nestjs IsEnum dto 验证和招摇【英文标题】:Nestjs IsEnum dto validation and swagger 【发布时间】:2020-09-30 00:55:08 【问题描述】:

这工作正常:

    import  IsIn  from 'class-validator';
    import  ApiProperty  from '@nestjs/swagger';

    export class createEventDto 
      @IsIn([0, 1, 2, 3, 4, 5])
      @ApiProperty(
        description: 'description of the severity property',
      )
      severity: number;
    

并且大摇大摆地看起来像这样:

我正在尝试了解如何将严重性类型更改为枚举,我已经尝试过:

export enum Severity 
  Critical = 1,
  Major = 2,
  Minor = 3,
  Warning = 2,
  Info = 1,
  Clear = 0,

    import  IsEnum  from 'class-validator';
    import  ApiProperty  from '@nestjs/swagger';
    import  Severity from '../enums/severities';

    export class createEventDto 
      @IsEnum(Severity)
      @ApiProperty(
        description: 'description of the severity property',
      )
      severity: Severity;
    

虽然它正在工作,但 swagger 看起来有点不对劲(示例不正确,并且架构中严重性的描述嵌套在括号中:

【问题讨论】:

【参考方案1】:

如果你想在 SwaggerUI 上表达一个枚举,你需要提供enum 属性给ApiProperty 装饰器

 import  IsEnum  from 'class-validator';
 import  ApiProperty  from '@nestjs/swagger';
 import  Severity from '../enums/severities';

 export class createEventDto 
   @IsEnum(Severity)
   @ApiProperty(
     description: 'description of the severity property',
     enum: Severity
   )
   severity: Severity;
 

文档:https://docs.nestjs.com/recipes/swagger#enums

【讨论】:

谢谢,我正在研究那个文档,但那个具体的例子不知何故逃过了我的眼睛.. :/ 实际上该链接现在被重定向到docs.nestjs.com/openapi/introduction,其中没有提及枚举。 Nest 的招摇整合似乎是一个记录不充分的话题

以上是关于Nestjs IsEnum dto 验证和招摇的主要内容,如果未能解决你的问题,请参考以下文章

自定义对象验证在 Nestjs DTO 中不起作用

NestJs:为啥我们不使用 DTO 来替换所有接口?

如何使用 DTO 将响应设置为招摇响应中的数组

NestJs - DTO 和实体

当类型是 Record <k,v> - NestJS 时,类验证器不起作用

NestJS 与猫鼬模式、接口和 dto 方法问题