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) 간의 관계 설정에서 순환 참조가 존재할 때입니다.
이 문제를 해결하는 방법은 다음과 같습니다:
Class Transformer를 사용하여 객체 직렬화:
class-transformer
패키지를 사용하여 응답 객체를 직렬화합니다. 불필요한 속성을 직렬화하지 않도록@Exclude
데코레이터를 사용합니다.순환 참조 수동 제거: 순환 참조를 일으키는 속성을 수동으로 제거하거나, 필요한 속성만 선택적으로 반환합니다.
DTO 사용: 엔티티를 직접 반환하는 대신 DTO를 사용하여 필요한 필드만 포함하도록 합니다. 이렇게 하면 순환 참조를 피할 수 있습니다.
커스텀 직렬화 로직: 복잡한 구조를 처리하고 순환 참조를 방지하기 위해 커스텀 직렬화 로직을 구현합니다.
댓글
댓글 쓰기