
개발을 진행하던 도중 만난 에러. 이 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 값을 순회하며 수동 변환하는 방법이 있다.
공부하면서 정리한 내용입니다. 모든 지적 감사히 받겠습니다:)
'backend > NestJS' 카테고리의 다른 글
[Prisma] Promise.all과 transaction 동시 사용 시 Transaction API error: Unable to start a transaction in the given time. 에러 발생. (2) | 2024.12.08 |
---|---|
[NestJS] EC2 배포 시 secretOrPrivateKey must have a value 해결 (0) | 2024.04.23 |
[NestJS] NestJS Docker 이미지 빌드 (1) | 2023.12.19 |
[Node.js] PM2 알아보기 (0) | 2023.09.26 |
[NestJS] NestJS에서의 Interceptor를 통한 AOP 구현 (0) | 2023.08.11 |