前端VS后端:这个锅你背不背!

简介: 前端VS后端:这个锅你背不背!

hello大家好,小面又和大家见面了,今天来给大家吐糟下前端js语言对numer类型的设定。

引言

事情是这样的,小面接到了开发几个接口的任务,其中有个数据库表的主键id数据类型是bigint。

而这张表之前没有增删改查,都是直接在版本发布之前配置的insert语句,当然数据也不多,就那么20多条。

大家平常在开发中应该也有类似的数据库表,本身就不多变的数据只需要配置下就可以了。

由于是手动写的sql,当然id就是1到20咯,大家看下脚本语句

再看下数据库表中的数据

就是这么简单的一个表,要做的功能就是对这个表数据的增删改查。

对大家来说应该很简单吧,是的小面也是一样心态,没想到在和前端联调时也萌萌哒。

出现的问题

问题就是小面利用postman自测列表查询,得到的结果比对数据库id是没问题的。

但是前端页面展示和接口返回的数据里id有重复值和后端数据库的id值有很大的区别。

前端返回接收到的数据:后端数据库的数据:

后端数据库表结构:

postman调用接口返回的数据

{
    "code": "000000",
    "msg": "操作成功",
    "timestamp": 1666771856.198000000,
    "data": [
        {
            "id": "220222022444767001",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 1,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-02-22 15:24:42"
        },
        {
            "id": "220222031215356001",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 1,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-02-23 08:12:15"
        },
        {
            "id": "220222044109397001",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 1,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-02-23 09:41:10"
        },
        {
            "id": "220302233218818001",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 1,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-03 12:32:19"
        },
        {
            "id": "220302233250818001",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 1,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-03 12:32:51"
        },
        {
            "id": "220303020753818001",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 1,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-03 15:07:54"
        },
        {
            "id": "220315014047346010",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 1,
            "xx4": 0,
            "xx5": 0,
            "xx6": 1,
            "xx7": 0,
            "createdTime": "2022-03-17 10:09:59"
        },
        {
            "id": "220315014047346011",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 1,
            "xx4": 0,
            "xx5": 0,
            "xx6": 1,
            "xx7": 0,
            "createdTime": "2022-03-17 10:10:29"
        },
        {
            "id": "220315014047346012",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 1,
            "xx4": 0,
            "xx5": 0,
            "xx6": 1,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346013",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 1,
            "xx4": 0,
            "xx5": 0,
            "xx6": 1,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346014",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 1,
            "xx4": 0,
            "xx5": 0,
            "xx6": 1,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346015",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 1,
            "xx4": 0,
            "xx5": 0,
            "xx6": 1,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346016",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346017",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346018",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346019",
            "typeId": "14",
            "xx1": "xx10",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346020",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346021",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346022",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346023",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 1,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346024",
            "typeId": "16",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346025",
            "typeId": "16",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346026",
            "typeId": "16",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346027",
            "typeId": "16",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346028",
            "typeId": "16",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346029",
            "typeId": "16",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346030",
            "typeId": "16",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "220315014047346031",
            "typeId": "16",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 1,
            "createdTime": "2022-03-17 10:11:37"
        },
        {
            "id": "221024010320425001",
            "typeId": "4",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-10-24 01:03:20"
        },
        {
            "id": "221024191017681001",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 1,
            "xx4": 1,
            "xx5": 1,
            "xx6": 1,
            "xx7": 1,
            "createdTime": "2022-10-24 19:10:18"
        },
        {
            "id": "221024191157681001",
            "typeId": "14",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 1,
            "xx5": 0,
            "xx6": 1,
            "xx7": 1,
            "createdTime": "2022-10-24 19:11:58"
        },
        {
            "id": "221024195406797001",
            "typeId": "4",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 1,
            "xx4": 0,
            "xx5": 1,
            "xx6": 1,
            "xx7": 1,
            "createdTime": "2022-10-24 19:54:07"
        },
        {
            "id": "221025184702585001",
            "typeId": "13",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 1,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-10-25 18:47:03"
        },
        {
            "id": "221025185114143001",
            "typeId": "30",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 1,
            "xx4": 0,
            "xx5": 0,
            "xx6": 0,
            "xx7": 0,
            "createdTime": "2022-10-25 18:51:14"
        },
        {
            "id": "221025193719934001",
            "typeId": "11",
            "xx1": "xx1",
            "xx2": null,
            "xx3": 0,
            "xx4": 1,
            "xx5": 0,
            "xx6": 1,
            "xx7": 1,
            "createdTime": "2022-10-25 19:37:20"
        }
    ],
    "success": true,
    "fail": false
}}

问题显而易见了吧,就是返回给前端的数据不对。

当时小面脑袋就想这TM什么神仙问题,怎么会这样,不过问题出现了还是得冷静下来进行分析...

问题分析

postman接口测试正常,前端小伙伴用的是vue,我们大概都知道vue是目前最火的前端框架了。

它也是对js进行了封装,刨其根本就是js接收数据的问题了,那先百度下看看有没有伙伴遇到类似问题

果然有同样踩坑的同学呀,跟着大家的经验去走一走,看看是不是这个问题咯。

然后查了一下,JS中number最大值是支持17位的,最大值是Number.MAX_VALUE ,它是 js的一个常量,表示js可表示的最大值 ,值为 1.7976931348623157e+308。

我们后端的bigint返回的long类型超过了17位就会造成精度丢失,所以就出现了前后端看到数据不一致的情况。

当然数据都不一致了,依靠id修改删除的操作就无法保证了。

解决

解决方法就是将返回给前端的id数据类型有Long改为String就正常了,是不是非常的简单,却是一个坑。

总结

今天的分享到这就结束了,相信你通过小面的实际开发案例对于Js中number精度丢失有了一印象,以后遇到这种情况就不会惊慌。

也可以在设计表阶段就规避这些问题,比如我用的这个type相关表,本身就没有多少数据,没有必要使用bigint。

但为何会设计成这样呢?

我去问了下同伴,说以前设计的时候统一规划的,当时就想着数据类型保持一致,所以就这样了。

有同学可能会问,为何不改数据库表的字段类型,这的确是个好问题,那小面为何不改呢?

这个改了会牵涉之前的功能改动,之前的功能改动会影响这个服务核心业务功能,改会增加自身工作量,也会给团队增加工作量。

还会给测试团队增加工作量,拿上去评估就是先这样把,不改。

估计大多数小伙伴和小面情况一样,遇到可优化的问题能改,可是改了会关联影响核心业务,除非实现不了才会改的这样一个现状。

如果有被说中,请多多点赞和再看,甚至可以动动手指帮小面转发一下,让大家少踩坑!

相关文章
|
2月前
|
前端开发
后端返回图片二进制流,前端转base64
本文介绍了如何将后端返回的图片二进制流转换为Base64格式,以便在前端使用。通过在axios请求中设置`responseType`为`arraybuffer`,然后使用`btoa`和`Uint8Array`进行转换。
233 5
|
2月前
|
前端开发 API UED
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
89 2
|
1月前
|
JSON 前端开发 Java
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
文章介绍了Java后端如何使用Spring Boot框架响应不同格式的数据给前端,包括返回静态页面、数据、HTML代码片段、JSON对象、设置状态码和响应的Header。
133 1
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
|
1月前
|
前端开发 算法 测试技术
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT
本文对比测试了通义千文、文心一言、智谱和讯飞等多个国产大模型在处理基础计数问题上的表现,特别是通过链式推理(COT)提示的效果。结果显示,GPTo1-mini、文心一言3.5和讯飞4.0Ultra在首轮测试中表现优秀,而其他模型在COT提示后也能显著提升正确率,唯有讯飞4.0-Lite表现不佳。测试强调了COT在提升模型逻辑推理能力中的重要性,并指出免费版本中智谱GLM较为可靠。
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT
|
1月前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
19 1
|
1月前
|
存储 前端开发 Java
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
本文介绍了使用Kaptcha插件在SpringBoot项目中实现验证码的生成和验证,包括后端生成验证码、前端展示以及通过session进行验证码校验的完整前后端代码和配置过程。
96 0
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
|
1月前
|
JSON 前端开发 数据格式
@RequestMapping运用举例(有源码) 前后端如何传递参数?后端如何接收前端传过来的参数,传递单个参数,多个参数,对象,数组/集合(有源码)
文章详细讲解了在SpringMVC中如何使用`@RequestMapping`进行路由映射,并介绍了前后端参数传递的多种方式,包括传递单个参数、多个参数、对象、数组、集合以及JSON数据,并且涵盖了参数重命名和从URL中获取参数的方法。
75 0
@RequestMapping运用举例(有源码) 前后端如何传递参数?后端如何接收前端传过来的参数,传递单个参数,多个参数,对象,数组/集合(有源码)
|
1月前
|
前端开发 JavaScript Java
导出excel的两个方式:前端vue+XLSX 导出excel,vue+后端POI 导出excel,并进行分析、比较
这篇文章介绍了使用前端Vue框架结合XLSX库和后端结合Apache POI库导出Excel文件的两种方法,并对比分析了它们的优缺点。
235 0
|
1月前
|
前端开发 JavaScript 小程序
前端uni开发后端用PHP的圈子系统该 如何做源码?
圈子系统系统基于TP6+Uni-app框架开发;客户移动端采用uni-app开发,管理后台TH6开发。系统支持微信公众号端、微信小程序端、H5端、PC端多端账号同步,可快速打包生成APP
|
1月前
|
前端开发 Java 数据库
springBoot:template engine&自定义一个mvc&后端给前端传数据&增删改查 (三)
本文介绍了如何自定义一个 MVC 框架,包括后端向前端传递数据、前后端代理配置、实现增删改查功能以及分页查询。详细展示了代码示例,从配置文件到控制器、服务层和数据访问层的实现,帮助开发者快速理解和应用。