3 nestjs 集成 Swagger

在这里插入图片描述

安装依赖

pnpm install @nestjs/swagger class-validator

在 main.ts 中定义 SwaggerModule 类

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  const config = new DocumentBuilder()
    .setTitle('water-admin')
    .setDescription('Background system based on Nest.js + Vue3 full stack')
    .setVersion('1.0')
    .build();

  const document = SwaggerModule.createDocument(app, config);

  // 设置swagger的地址url: /api
  SwaggerModule.setup('api', app, document);

  await app.listen(3000);
}

bootstrap();
方法描述
setTitle文档标题
setDescription文档描述
setVersion文档版本
setTermsOfService文档服务条款
setContact文档联系信息
setLicense文档许可证信息
addServer文档服务地址
setExternalDoc文档外部链接
setBasePath设置文档基础路径
addTag添加文档标签
addExtension添加扩展
addSecurity添加安全方案
addGlobalParameters添加全局参数
addSecurityRequirements添加安全需求
addBearerAuth添加 Bearer Token 认证
addOAuth2添加 OAuth2 认证
addApiKey添加 ApiKey
addBasicAuth添加基础认证
addCookieAuth添加 Cookie 认证
build构建服务

在 DTO 中使用装饰器

import { ApiProperty } from '@nestjs/swagger';
import { IsNumberString, IsOptional, IsUUID } from 'class-validator';

export class CreateWaterDto {
  @ApiProperty({
    type: String,
    description: '岗位名称',
    required: false,
    default: '前端工程师',
  })
  name?: string;

  @ApiProperty({
    type: String,
    description: '所属组织',
    default: 'f45cd48b-e703-49db-91be-ae7f594e73e0',
    required: false,
  })
  @IsOptional()
  @IsUUID('all', { message: 'orgId 参数不正确' })
  orgId?: string;

  @ApiProperty({
    type: Number,
    description: '开始日期',
    default: 1721145600000,
    required: false,
  })
  @IsOptional()
  @IsNumberString({}, { message: '开始日期必须是时间戳格式' })
  startTime?: number;

  @ApiProperty({
    type: Number,
    description: '结束日期',
    default: 1721318399999,
    required: false,
  })
  @IsOptional()
  @IsNumberString({}, { message: '结束日期必须是时间戳格式' })
  endTime?: number;
}

在 Controller 控制器 中使用装饰器

import {
  Controller,
  Get,
  Post,
  Body,
  Patch,
  Param,
  Delete,
} from '@nestjs/common';
import { WaterService } from './water.service';
import { CreateWaterDto } from './dto/create-water.dto';
import { UpdateWaterDto } from './dto/update-water.dto';
import { ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger';

@ApiTags('岗位管理')
@Controller('water')
export class WaterController {
  constructor(private readonly waterService: WaterService) {}

  @Post()
  @ApiOkResponse({ type: CreateWaterDto })
  @ApiOperation({ summary: '获取岗位管理列表' })
  create(@Body() createWaterDto: CreateWaterDto) {
    return 'ff------ 火箭 🚀';
  }

  @Get()
  findAll() {
    return this.waterService.findAll();
  }

  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.waterService.findOne(+id);
  }

  @Patch(':id')
  update(@Param('id') id: string, @Body() updateWaterDto: UpdateWaterDto) {
    return this.waterService.update(+id, updateWaterDto);
  }

  @Delete(':id')
  remove(@Param('id') id: string) {
    return this.waterService.remove(+id);
  }
}

在这里插入图片描述

常用 Swagger 装饰器

装饰器描述
@ApiTags为控制器或方法添加标签,用于组织 Swagger UI 文档
@ApiOperation为控制器方法添加操作描述,包括摘要和详细描述
@ApiParam描述路径参数、请求参数或响应参数,包括名称、类型、描述等
@ApiBody指定请求体的 DTO 类型,用于描述请求体的结构
@ApiResponse描述 API 的响应,包括状态码、描述等
@ApiBearerAuth指定请求需要携带 Bearer Token,用于身份验证
@ApiProperty为 DTO 类型的属性添加元数据,如描述、默认值等
@ApiQuery描述查询参数,包括名称、类型、描述等
@ApiHeader描述请求头信息,包括名称、类型、描述等
@ApiExcludeEndpoint标记一个控制器方法不在 Swagger UI 中显示
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

史一试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值