nest应用中,除了在DTO
中应用class-validator
去做校验。
还能够去写swagger
文档。
在nest
的controller
写法中,代码如下
//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反对的Type
有String
,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; ...}
咱们只须要hintText
与name
只须要这么写
class updateDTO extends PickType(PersonDTO,['name','hintText']){}
updateDTO
只有name
与hintText
两个属性。
PickType
显然很有用
OmitType
OmitType
与PickType
性能是相同的,写法也一样。
移除指定的输出属性。
IntersectionType
IntersectionType()
函数将两种类型组合成一个新类型.
export class UpdateCatDto extends IntersectionType(CreateCatDto, AdditionalCatInfo) {}
留神是将两种输出类变成一个输出类,把两个类的所有属性合并为一个类
PartialType
是类的所有成员全副变成可选的。PickType
对指定输出类抉择指定的成员并返回一个类。OmitType
对指定输出类排除指定的成员并返回一个类。IntersectionType
是合并两个输出类,合并所有成员。
更强的组合写法
函数类映射是反对组合的写法的。
export class UpdateCatDto extends PartialType( OmitType(CreateCatDto, ['name'] as const), ) {}
TODO: 枚举