后台返回超过number边界大小(53位)数字时的前端解决方案(axios)

348

本地node实验。

如图示,由于js number长度的原因,会导致尾部精度丢失。

背景

一次开发过程中,后台(java)传输过来的数据发生了丢失,后台查询log后,发现是正常的。一开始没有想到是Java long 转化到 js number 的问题。

定位

调查了数据库,抓了包,最后才定位到问题。

一般web经验老到的后台会将,过长的数字会采用字符串进行传递。

网上的解决方案也偏向后台解决。

解决

后台同学比较迷茫的状态下。

就在前端解决了。

引入这个工具包。

const JSONbig = require("json-bigint")({ storeAsString: true });

对请求到数据进行修饰,本项目使用axios进行网络请求。

对axios 的 transformResponse 属性进行配置。

    transformResponse: function(data: any) {
      let result = JSONbig.parse(data);
      return result;
    }

就能将后台的超过js number的数字转为string。

可能这个时间点,大家会想到bigint,但我解决问题后并没有去研究关于bigint的方案~