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
这是我的要求:
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