본문 바로가기

react

big integer 를 응답으로 받아보자

개발을 하던중 큰 숫자로된 계정 값을 받아오는데, 이상하게도 끝자리가 0000로 끝났다.

백엔드 개발자에게 확인해 달라했지만 그런 처리는 하지 않는 다는 답변이 왔다.

리액트에서는 api 결과를 뿌려주기만 해서, 당연히 백엔드 문제라고 생각했는데, postman을 써서 호출해보니 정상적으로 응답이 왔다.

 

js automatically round ~~ 이런식으로 구글링을 하던중, 답을 찾았다.

 

https://stackoverflow.com/questions/43787712/axios-how-to-deal-with-big-integers

 

axios - how to deal with big integers

Here is my request: axios.get(url) .then(res => { console.log(res.data) }) The output is { value: 156144277082605255 } But should be { value: 156144277082605250 } How to ...

stackoverflow.com

학부 시절 한번쯤 들었던, 자료형의 크기문제였다.

내가 적용한 방법을 정리한다 !

 

 

1. 백엔드 개발자에서 string형으로 응답 달라고 한다.

깔끔하지만, 다른 곳에서 이 문제가 발생할 수 있기 때문에, 이 문제 자체의 해결이 필요하다.

 

2. json-bigint 라이브러리의 사용

axios 응답에다가 big int 를 처리하도록 적용하자.

나의 경우 axios instance 를 사용하고 있었는데, axios config옵션 중 transformResponse를 사용해서 응답에 공통적으로 이를 적용할 수 있다.

import BigInt from 'json-bigint';

const axiosApiInstance = axios.create({
  ...,
  transformResponse: function (response) {
    return BigInt().parse(response);
  },
});

 

반응형