Nest Swagger 1. 사용 방법 [ 세팅, summary 생성, property 생성 ]

2022. 4. 20. 15:54Nest.js

1. 설치

2. 첫 swagger 세팅

3. api summary, property생성

 

1. 설치

npm install --save @nestjs/swagger swagger-ui-express

 

2. 첫 세팅

main.ts에서

bootstrap() 함수에 swagger를 추가 해준다.

 

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

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

  const config = new DocumentBuilder()
    .setTitle('Swagger 타이틀')
    .setDescription('Swagger description')
    .setVersion('서버 버전')
    .build();
  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('api', app, document);

  await app.listen(3000);
}
bootstrap();

 

그러면 nest가 자동으로 controller과 DTO 분석해서 

Api를 가져와 보여준다.

 

3. api summary, response, property  생성 (선택 사항)

2. 에서 만들어진 swagger를 보면 상세한 설명, response값을 몰라 이용하는 개발자가 헷갈리거나 귀찮을 수 있다.

그래서 api대한 설명을 위해 api summary property api 결과값과 타입을 알수있게 api response을 넣어준다.

 

설명 : 

1. Controller에서 summary와 response를 만든다.

2. DTO에서 필요한 property 예시를 만든다.

 

import 방법 :

summary :  swagger 의 ApiOperation을 import

property : swagger ApiProperty를 import

 

 

 summary 적용

//users.controller.ts 

import { UsersService } from './users.service';
import { Controller, Post, Put, Get, Param, Body } from '@nestjs/common';
import {
  FindUserIdDto,
  FindUserCheckDto,
  PasswordChangeDto,
} from './users.dto';
import { ApiOperation, ApiResponse } from '@nestjs/swagger';

@Controller('users')
export class UsersController {
  constructor(private readonly userService: UsersService) {}

  @ApiOperation({ summary: '핸드폰 번호로 아이디 찾기' })
  @Get(':hp')
  async findUserId(@Param() param: FindUserIdDto) {
    return await this.userService.findUserId(param);
  }

  @ApiOperation({ summary: '핸드폰번호, 아이디로 유저 존재  확인' })
  @Post('check')
  async findUserCheck(@Body() body: FindUserCheckDto) {
    return await this.userService.findUserCheck(body);
  }

  @ApiOperation({ summary: '비밀번호 변경' })
  @Put('password')
  async passwordChange(@Body() body: PasswordChangeDto) {
    return await this.userService.passwordChange(body);
  }
}

 property  적용

 

///users.dto.ts

// import { MainGame } from '../model/main.model';
import { IsNotEmpty, IsString } from 'class-validator';
import { ApiProperty } from '@nestjs/swagger';
export class FindUserIdDto {
  @ApiProperty({
    example: '010554654656',
    description: 'hp',
    required: true,
  })
  @IsNotEmpty()
  @IsString()
  hp: string;
}
export class FindUserCheckDto {
  @ApiProperty({
    example: 'testid',
    description: 'id',
    required: true,
  })
  @IsNotEmpty()
  @IsString()
  id: string;

  @ApiProperty({
    example: '010554654656',
    description: 'hp',
    required: true,
  })
  @IsNotEmpty()
  @IsString()
  hp: string;
}
export class PasswordChangeDto {
  @ApiProperty({
    example: 'testid',
    description: 'id',
    required: true,
  })
  @IsNotEmpty()
  @IsString()
  id: string;

  @ApiProperty({
    example: 'pwd!qwe',
    description: 'pwd',
    required: true,
  })
  @IsNotEmpty()
  @IsString()
  pwd: string;
}

변경 이후 

728x90
반응형