JSON 변환 응답 에러 - NestJS

 아래는 작성한 코드이다.


for (let i = 0; i < reserve.length; i++) {

      reserve[i]['requestProduct'] = [];

      for (let j = 0; j < requestItems.length; j++) {

        if (requestItems[j].reserveId === reserve[i].id) {

          console.log("push requestProduct item : ", reserve[i]);

          reserve[i]['requestProduct'].push(reserve[i]);

        }

      }

    }




[Nest] 713  - 07/25/2024, 9:37:19 AM   ERROR [ExceptionsHandler] Converting circular structure to JSON

    --> starting at object with constructor 'BusinessRequestReserveEntity'

    |     property 'requestProduct' -> object with constructor 'Array'

    --- index 0 closes the circle


해당 오류(Converting circular structure to JSON)는 객체 내에 순환 참조(circular reference)가 있을 때 JSON으로 변환하려고 하면 발생합니다. NestJS에서 이런 문제가 발생하는 주된 이유는 엔티티(Entity)나 DTO(Data Transfer Object) 간의 관계 설정에서 순환 참조가 존재할 때입니다.

이 문제를 해결하는 방법은 다음과 같습니다:

  1. Class Transformer를 사용하여 객체 직렬화: class-transformer 패키지를 사용하여 응답 객체를 직렬화합니다. 불필요한 속성을 직렬화하지 않도록 @Exclude 데코레이터를 사용합니다.

  2. 순환 참조 수동 제거: 순환 참조를 일으키는 속성을 수동으로 제거하거나, 필요한 속성만 선택적으로 반환합니다.

  3. DTO 사용: 엔티티를 직접 반환하는 대신 DTO를 사용하여 필요한 필드만 포함하도록 합니다. 이렇게 하면 순환 참조를 피할 수 있습니다.

  4. 커스텀 직렬화 로직: 복잡한 구조를 처리하고 순환 참조를 방지하기 위해 커스텀 직렬화 로직을 구현합니다.



댓글

이 블로그의 인기 게시물

DAQ로 전압 측정하기-2

Nest JS URL에 있는 쿼리(Query) 읽기

appendChild를 이용하여
  • 늘리기_JavaScript_2번