记一次前后端联调发现的 bug - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MOS
V2EX    自言自语

记一次前后端联调发现的 bug

  •  1
     
  •   MOS 2019-04-24 17:09:21 +08:00 1241 次点击
    这是一个创建于 2372 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这天,公司前端程序猿小明正在吃着火锅唱着歌,欢快地跟后端开发小刚联调接口。页面其实也不难,在个人空间显示一个历史记录列表,然后列表的每个 item 都可以对应地操作。就像这样: 屏幕快照 201-04-22 下午 4.15.02.png 轻车熟路驾轻就熟举重若轻的小明轻而易举轻描谈写轻松愉快地实现了页面逻辑,然后点击“下载试卷”准备见证奇迹,然而奇迹并没有发生。

    小明隔着工位对对面的小刚喊道:“你的下载接口有问题!”

    小明的言辞冒犯了小刚作为一个后端的尊严,小刚抑制住了一闪而过的多个念头“你的环境才有问题”、“**你会用吗”,耐着性子检查了一遍自己的逻辑,回复道:“没毛病啊,你把 id 给我”。

    小明从内部 IM 扔过去一串数 76154831290589340。id 的生成是随机的,像这个 bug 一样混沌而无规律。

    小刚:“你这 id 在库里不存在。”

    小明:“怎么可能,你返回给我的”。

    小刚:“胡说,我给你的明明是 76154831290589341。”

    ……

    此处略去互相扯皮二百字。

    接下来,二人友好地坐到了一起,开始见证奇迹。

    小明:“你看,这是网络请求的返回,诶,等等,为啥结尾是 41 ?”(打脸声) 屏幕快照 2019-04-22 下午 4.30.17.png 小明尝试继续挣扎:“不对啊,你看渲染出来的页面,见鬼了。” 屏幕快照 2019-04-22 下午 4.30.42.png 一顿操作中,小明不小心点中了开发中工具 Network 中 Preview 栏,更加诡异的现象出现了: 屏幕快照 2019-04-22 下午 4.33.14.png 明明是同一个请求,Preview 里跟 Response 里还不一样。这究竟是因为道德的扭曲还是人性的沦丧!?小明不禁陷入了深思。

    在旁观摩良久的小刚说:“我有一个大胆的想法。”于是他接过页面控制台,打出了惊世骇俗的一个表达式,这个发现足以颠覆现代数学的基础。(误) 屏幕快照 2019-04-22 下午 4.35.29.png 到这之后事情变得简单了,根本原因是后端将 id 类型定义为 long, 所以这个数在后端眼里并未超出范围。但是对于 Javascript, number 类型的大整数超出 2 的 53 次方( 9007199254740992 )就会出现不精确的问题。解决方法也很简单,response 中改为返回 string 即可。

    1 条回复    2020-08-27 19:00:13 +08:00
    fhsan
        1
    fhsan  
       2020-08-27 19:00:13 +08:00
    所以呢,一串数字,不要相信第三方的数据长度规范、不要相信测试的数据
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3344 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 10:46 PVG 18:46 LAX 03:46 JFK 06:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86