오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

Web Programming/NestJS

[NestJS] Swagger에서 refs 안될 때

junha6316 2022. 8. 22. 22:49

Swagger에서 DTO를 이용해 서버 응답 값을 정의하는 기능이 있는데 직접 가져오는게 아닌 경로를 작성해주면 해당 경로에 있는 클래스를 가져와 붙여주는 기능이 있다. 경로는 분명히 맞는데 안되는 경우가 있어서 정리해둔다.

 

해결 방법은 간단하다. 아래처럼 createDocument의 extraModels에 추가로 정의 해주면 된다. 

const document = SwaggerModule.createDocument(app, options, {
  extraModels: [
    DogCreateDTO,
    DogUpdateDTO
  ],
});

SwaggerModule.setup("api-docs", app, document, {
  swaggerOptions: {
    defaultModelsExpandDepth: -1,
    persistAuthorization: true,
  },
});

실제로 사용하는 시점에서는 아래처럼 사용하면 된다.

 

@ApiResponse({
  status: 200,
  isArray: true,
  description: "Successful response",
  schema: {
    type: "object",
    properties: {
      statusCode: { type: "string" },
      res_code: { type: "string" },
      data: {
        type: "array",
        items: {
          anyOf: [
            { $ref: getSchemaPath(DogCreateDTO) }, // 이렇게 사용하면 된다.
          ],
        },
      },
    },
  },
})