axios - 如何处理大整数

axios - how to deal with big integers

这是我的要求:

    axios.get(url)
    .then(res => {
        console.log(res.data)
    })

输出为{ value: 156144277082605255 }

但应该是{ value: 156144277082605250 }

在这种情况下如何处理大整数? 我尝试使用 json-bigint 但是由于我从 axios 中获取 response.data 作为对象 - 它没有帮助。

我的同事回答了这个问题:

我不得不将我的 response.data 转换成字符串。 (您可能想知道 - 为什么无用函数 - 只是重新定义默认行为,它使用 JSON.parse 将字符串解析为对象 - 在这里我们跳过这一步)

axios.get(url, { transformResponse: [data  => data] });

然后用json-bigint

解析
JSONBigInt.parse(res.data);

运行 安装 json-bigint: npm install json-bigint --save

然后,使用 transformResponse 作为 axios get request

的选项
const jsonBig = require('json-bigint');

let url = 'https://your-api';
axios.get(url, { transformResponse: function(response) {
      return jsonBig().parse(response.data);
}});

您也可以通过以下方式使用它:

const jsonBig = require('json-bigint');

axios({
  url: 'https://your-api',
  method: 'get',
  transformResponse: function(response) {
    return jsonBig().parse(response);
  },
})

添加到上述答案中,如何将 JSONbigint 与 axios 请求和响应拦截器集成。

import JSONbigint from 'json-bigint'
...

// request interceptor, preventing the response the default behaviour of parsing the response with JSON.parse
axios.interceptors.request.use((request) => {
  request.transformResponse = [data => data]
  return request
})

// response interceptor parsing the response data with JSONbigint, and returning the response
axios.interceptors.response.use((response) => {
  response.data = JSONbigint.parse(response.data)
  return response
}

范围内的整数将保持 number 类型,超出范围的整数将保持 BigNumber 类型。如果需要,可以通过简单地在 BigNumber

类型的键上调用 toString()BigNumber 解析为 string