본문 바로가기
backend/NestJS

[NestJS] TypeError: Do not know how to serialize a BigInt 문제 해결

by BK0625 2025. 5. 29.
반응형

기존 코드

 

개발을 진행하던 도중 만난 에러. 이 api를 호출했을 때 에러도 뱉어내지 않고 계속해서 응답이 오지 않는 상황이 벌어졌다.

 

서비스 단에서의 문제인가 봤더니 문제가 없었고 리턴 값에 console.log를 찍어봐도 잘 나오는데 리턴만 안됐다.

 

gpt한테 바로 물어보니...

 

 

라길래 바로 json으로 강제로 직렬해보았다. 그랬더니 발생한 에러

 

TypeError: Do not know how to serialize a BigInt

 

이는 응답 데이터를 Nestjs에서는 JSON.stringify()로 직렬화할 때 BigInt 타입이 포함되어 있으면 발생하는 에러이다. 데이터가 많아질 거 같아 한 테이블의 pk 타입을 bigint로 설정했더니 이런 문제가 발생한 것이였다.

 

가장 안전하고 간단한 방법은 모든 BigInt를 string으로 변환하는 것이다.

 

return JSON.parse(
  JSON.stringify(res, (_, value) => 
    typeof value === 'bigint' ? value.toString() : value
  )
);

 

이렇게 하려고 시도도 해보았으나

const cleaned = JSON.parse(JSON.stringify(res, (_, v) =>
  typeof v === 'bigint' ? parseInt(v.toString()) : v
));
return cleaned;

 

Nestjs가 return cleaned를 받으면 내부적으로 res.json(...) 을 호출하는데 이 시점에서 객체에 BigInt가 존재하면 Nodejs의 JSON.stringify가 TypeError: Do not know how to serialize a BigInt를 발생시키고 NestJS의 인터널이 자동으로 Bigint를 string으로 변환해서 리턴하기 때문에 이미 string으로 바뀐 상태라 의미가 없다고 한다.

 

이렇게 되면 재귀적으로 BigInt 값을 순회하며 수동 변환하는 방법이 있다.


공부하면서 정리한 내용입니다. 모든 지적 감사히 받겠습니다:)

반응형