如何在swagger nestjs中手动添加摘要和正文

时间:2020-02-07 12:58:44

标签: swagger swagger-ui nestjs nestjs-swagger

我试图在我的招摇的文档路线中添加摘要,但是找不到合适的装饰器来定义摘要。

有些路线中我没有指定任何DTO。因此,我想为该端点手动添加请求正文。

user.controller.ts

@Controller('users')
@ApiTags('User')
@ApiBearerAuth()
export class UsersController {

  constructor(private readonly service: UsersService) {}

  @Get()
  async findAll() {
    const data = await this.service.findAll();

    return {
      statusCode: 200,
      message: 'Users retrieved successfully',
      data,
    };
  }
}

Swagger

auth.controller.ts

  @UseGuards(AuthGuard('local'))
  @Post('login')
  @ApiParam({
    name: 'email',
    type: 'string'
  })
  @ApiParam({
    name: 'password',
    type: 'string'
  })

  async login(@Request() req) {
    return this.authService.login(req.user);
  }

2 个答案:

答案 0 :(得分:2)

对于端点摘要,可以使用@ApiOperation()。对于模式,可以使用@ApiResponse()

@Get()
@ApiOperation({ summary: 'summary goes here' })
@ApiResponse({ status: 200, description: 'description goes here', schema: { ...define schema here... } })
async findAll() {}

从以下文档中获取有关原始定义的更多信息:https://docs.nestjs.com/recipes/swagger#raw-definitions

答案 1 :(得分:2)

我建议为所有端点(resp和req)创建一个DTO。

以下是使用DTO + @ApiProperty装饰器向架构中添加摘要的方法(在屏幕快照中,单击红色圆圈区域中的“模式”)

import { ApiProperty } from '@nestjs/swagger';

export class ExampleRedditDTO {
    @ApiProperty({
        type: String,
        description: "The target subreddit"
    })
    targetSub!: string;

    @ApiProperty({
        type: Number,
        description: "The number of top posts you want back"
    })
    postCount!: number;
}