nest应用中,除了在DTO中应用class-validator去做校验。

还能够去写swagger文档。

nestcontroller写法中,代码如下

//person.controller.ts@Post()async create(@Body() person: PersonDTO): Promise<Person> {  return  ....}

SwaggerModule会查找到@Body这个装璜器来生成API文档。同样的装璜器还有@Query,@Param。至于详尽的api阐明都是从PersonDTO中解析进去。

能够查阅中文文档链接

上面是一些罕用的装璜器

ApiProperty

参数阐明

  • type 类型
  • required 是否必须
  • description 形容
  • default 默认值
  • name 属性名称,默认是装璜器润饰的属性名,然而显性的设置name文档中依照这个name的value为最终输出值

type

DTO的写法

class PersonDTO {  name: string;    app: number; //或者    links: string[]// 数组   }

这是ts的写法

而ApiProperty反对的TypeString,Number,Function,以及数组[String]

数组的写法就是这样,肯定要在type属性申明为[type]或者设置isArray属性为true

ApiBody

TypeScript 不会存储无关泛型或接口的元数据.

须要应用ApiBody显性设置类型。

对于没用参数装璜器三兄弟的,又须要写文档的,就用ApiBody制订一个DTO

@ApiBody({ type: [CreateUserDto] })createBulk(@Body() usersDto: CreateUserDto[])

设置可选 ApiPropertyOptional

ApiProperty默认是必填的,如果冀望是选填的。

能够应用ApiPropertyOptional来代替。能够不须要去{required: false}

ApiPropertyOptional其它参数参考ApiProperty.

返回可选的装璜器 PartialType()

对于create操作,所有的参数可能都是必填。

而对于update操作,只须要更新局部操作。

通过PartialType能够返回一个所有输出都是可选的参数

export class UpdatePersonDto extends PartialType(CreatePersonDto) {}

在更新的Controller应用这个CreatePersonDto就能够了。

我在写本地demo的时候,发现PartialType在@nest/swagger下不存在。如果你也有这个问题,须要降级swagger这个包。~~~~

more

PickType()

性能从一个输出类型中抉择一部分属性来创立一个新类型(类)

重点是抉择一部分

class PersonDTO { @ApiProperty({    message: '',    type: String, }) name: string;  @ApiProperty({    message: '',    type: String, }) hintText: string; ...}

咱们只须要hintTextname

只须要这么写

class updateDTO extends PickType(PersonDTO,['name','hintText']){}

updateDTO只有namehintText两个属性。

PickType显然很有用

OmitType

OmitTypePickType性能是相同的,写法也一样。
移除指定的输出属性。

IntersectionType

IntersectionType()函数将两种类型组合成一个新类型.

export class UpdateCatDto extends IntersectionType(CreateCatDto, AdditionalCatInfo) {}

留神是将两种输出类变成一个输出类,把两个类的所有属性合并为一个类

  • PartialType是类的所有成员全副变成可选的。
  • PickType对指定输出类抉择指定的成员并返回一个类。
  • OmitType对指定输出类排除指定的成员并返回一个类。
  • IntersectionType是合并两个输出类,合并所有成员。

更强的组合写法

函数类映射是反对组合的写法的。

export class UpdateCatDto extends PartialType( OmitType(CreateCatDto, ['name'] as const), ) {}

TODO: 枚举