next.js swagger 설치하기
npm i @nestjs/swagger
main.ts
import { HttpExceptionFilter } from 'src/common/exceptions/http-exception.filter';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';
import { SwaggerModule, DocumentBuilder, OpenAPIObject } from '@nestjs/swagger';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe()); // class validation 등록
app.useGlobalFilters(new HttpExceptionFilter()); // global filter 사용
const config = new DocumentBuilder()
.setTitle('C.I.C')
.setDescription('cat')
.setVersion('1.0.0')
.build(); // swagger 설정
const document: OpenAPIObject = SwaggerModule.createDocument(app, config); // swagger 생성
SwaggerModule.setup('docs', app, document); // swagger 등록
const PORT = process.env.PORT;
await app.listen(PORT);
}
bootstrap();
main.ts
파일에 다음과 같이 swagger를 등록한다
const document: OpenAPIObject = SwaggerModule.createDocument(app, config); // swagger 생성
SwaggerModule.setup('docs', app, document); // swagger 등록
cats.controller.ts
import { Body, UseFilters, UseInterceptors } from '@nestjs/common';
import { Controller, Get, Post, Put } from '@nestjs/common';
import { HttpExceptionFilter } from 'src/common/exceptions/http-exception.filter';
import { SuccessInterceptor } from 'src/common/interceptors/success.interceptor';
import { CatsService } from './cats.service';
import { CatRequestDto } from './dto/cats.request.dto';
import { ApiOperation, ApiResponse } from '@nestjs/swagger';
import { ReadOnlyCatDto } from './dto/cat.dto';
@Controller('cats')
@UseInterceptors(SuccessInterceptor)
@UseFilters(HttpExceptionFilter)
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@ApiOperation({ summary: '조회' }) // swagger 요약
@ApiResponse({
status: 500,
description: 'Server Error',
})
@ApiResponse({
status: 200,
description: 'Success',
})
@Get()
getCurrentCat() {
return 'current cat';
}
@ApiOperation({ summary: '회원가입' })
@ApiResponse({
status: 500,
description: 'Server Error',
})
@ApiResponse({
status: 200,
description: 'Success',
type: ReadOnlyCatDto, // response로 성공했을 때 받을 값
})
@Post()
async signUp(@Body() body: CatRequestDto) {
return await this.catsService.signUp(body);
}
@ApiOperation({ summary: '로그인' })
@Post('login')
logIn() {
return 'login';
}
@ApiOperation({ summary: '로그아웃' })
@Post('logout')
logOut() {
return 'logout';
}
@ApiOperation({ summary: '고양이 이미지 업로드' })
@Post('upload/cats')
uploadCatImg() {
return 'uploadImg';
}
}
ApiOperation
, ApiResponse
를 이용해서 swagger의 내용을 작성할 수 있다.
signup 기능에 아래와 같은 코드가 추가 된 것을 볼 수 있다.
@ApiResponse({
status: 200,
description: 'Success',
type: ReadOnlyCatDto, // response로 성공했을 때 받을 값
})
type
에 dto
(여기서는 ReadOnlyCatDto
)를 작성하면 response
성공 시 나타나는 값들을 작성할 수 있다.