遇到一个BUG,感觉值得记录一下;

BUG场景描述:

  • 第一步、弹窗X中,通过用户二维码,调用接口A,获取用户的代理商类型等信息;
  • 第二步、通过判断用户的代理商类型,赋type值,并且PUSH接口B得到订单的出库类型;(这里的判断值,type赋值,前端出错了)
  • 第三步、得到订单的出库类型后,在校验弹窗Y展示订单号和需要出库的user_id/用户名、类型,设备去向;供操作者校验订单号与代理商信息,如果校验没问题,可以在校验的窗口直接输入出库设备,PUSH到接口C;(校验窗口Y有两个作用,1 是供操作者校验信息,2是储存接口C所需要的参数);

根本原因:一个值判断错误,

 

  • proxy_type:无需判断 – > type:1;
  • proxy_type:0 – > isNoDIstributor();//手动抛出错误,非代理商,普通用户;
  • proxy_type:1 – ->type:2;
  • proxy_type:2 —>type:2;
  • proxy_type:3—>type:3;

前端代码中的错误

  • 需要PUSH接口B,并且获得订单号的参数type值;在赋值之前没有清零;

后端接口中的错误

  • 生成出库订单的接口B,在返回出库订单的同时,应该把此次需要出设备的用户数据一起返回(与订单号耦合在一起);校验弹窗Y里需要操作者校验的信息,应该由后端进行信息输出,这样可以保持数据的准确行;(目前的校验弹窗Y中,订单号是由后端输出的,用户数据是由前端输出的[弹窗X中,获取用户二维码的时候,前端把接口A返回的信息保存在一个变量里,然后输出在校验页面])

目前遇到难以排除的BUG原因是

接口B接收的参数type值虽然是错误的,但是可以正常返回出库订单号,表象是接口B调用成功了

真实情况是:接口B接收错误的参数,正常生成了出库订单号,但是与订单号匹配的用户信息是异常的

校验页面显示情况是:订单号正常显示,订单号匹配的用户信息也显示正常(表象是正常的);

在前端调用接口C的时候,接口C会验证接口B的订单号和用户user_id,如果异常,会出库失败;(接口B虽然生成了订单号,但是匹配的用户信息是异常的;此时的订单号虽然显示正常,但属于异常的订单,接口C验证时候肯定是通过不了的,后端接口B在接收错误参数时,不应该正常生成订单号的);

 

解决和避免以后出现类似问题的方法:

前端前端数据严格的清零后再赋值;这样赋值错误的时候,很容易查到错误原因;(测试的时候,应该更仔细一些,多考虑一些可能的异常情况)

后端:后端接口在参数接收错误的时候,不应该返回正常的订单号;并且需要校验的数据应该由后端统一输出,不应该前端输出一部分(用户信息),后端输出一部分(出库订单号);然后让操作者校验用户信息和订单号是否匹配(两个不耦合的东西,操作者是不能判断是否属于匹配数据的);

最终结果

1、操作者:因为订单号和用户信息都有,用户信息是显示正常的,是自己想出的代理商,订单号是正常显示的(操作者不知道订单号已经是错误的订单号码,只要正常显示,操作者都以为生成出库订单正常了),但是正常出库设备的时候,返回的是出库失败;操作者就懵逼了,找不到原因;

2、前端看到订单号正常生成,以为接口调用成功了,没有察觉到传参的值是错误的了;以为已经获得了与用户信息匹配的出库订单号;(前端处理流程是:如果成功获得了与用户信息匹配的出库订单号,就把用户信息输出在校验窗口);前端看到订单号正常,用户信息正常,也一脸懵逼;

3、后端:看校验页面用户信息和订单号都正常显示,但是出库却失败了,也很无奈;

这种情况下,只有在打断点,看每一步的参数,然后在接口中确认才能发现到底是哪一步出现问题了;

改进办法:

前端:严格处理好自己的数据,不要修改或者主动赋值没有的信息到校验窗口(这里的用户信息就不应该前端输出,而是让后端把订单号,用户信息都返回给前端,前端只做展示即可);

后端:校验窗口的出库的数量,出库的订单号,出库订单号匹配的用户信息,应该在接口中返回;不应该让前端自己组装信息让用户校验;

【完】

前端:

数据赋值之前先清零,动画开始之前先停止;

定时器转移之前先清除,显隐操作之前先隐藏;

 

 

 

 

 

 

 

 

 

~~~~~