본문 바로가기

NodeJS

swagger 2.0에서 OAS 3.0으로 변환시 body 값이 undefined로 표출 되는 현상 처리

swagger 2.0에서 OAS 3.0으로 변환시 body 값이 undefined로 표출 되는 현상 처리

이전에 작성했던 Swagger 2.0으로 된 프로젝트를 새로 배운 OAS 3.0으로 변환하는 작업을 해보았습니다.

Swagger Editor을 통해서 변환을 하고, oas-generator 이용해서 코드를 자동 생성하였습니다.

이후 POST, PUT 등을 확인하는 중 requestBody를 넘기면 다음과 같이 접근해야 값을 확인 할 수 있었습니다.

function createPets(req, res, next) {
    let params = req.swagger.params[undefined].value;
    res.status(200).send({ status: 'OK', message: 'TEST OK!', params });
}

Swagger 2.0에서는 req.swagger.params.body.value 를 이용하였는데, 어떤 문제인지 검색을 해보니, OAS 3.0에서는 x-name이 라는 옵션을 주어서 requestBody의 이름을 설정해야 했습니다.

샘플

post:
  summary: Create a pet
  operationId: createPets
  tags:
    - pets
  requestBody:
    description: Pet to add to the store
    x-name: pet # 이 이름을 사용해서 조회 하도록 합니다.
    required: true
    content:
      application/json:
        schema:
          $ref: '#/components/schemas/Pet'

이후 다음과 같이 사용할 수 있었습니다.

function createPets(req, res, next) {
    let params = req.swagger.params.pet.value;
    res.status(200).send({ status: 'OK', message: 'TEST OK!', params });
}

이 내용은 5. Add name property to request bodies를 보면 예제로 표기 되어 있습니다.

참고자료