大家在开发时,遇到的一个典型的 Bug 便是:为什么数据查询为空?

对应的现象便是:前端展现不出数据、或许后端查询到的数据列表为空。

写了个数据查询为空的 Bug,你会怎么办?

遇到此类问题,其实是有经典的处理套路的,下面鱼皮给大家分享怎么高效处理这个问题。

只需 4 个过程:

处理过程

1、定位问题鸿沟

首先要定位数据查询为空的过错鸿沟。说简单一点,便是要承认是前端仍是后端的锅。

要先从恳求的源头排查,也便是前端浏览器,究竟前端和后端是经过接口(恳求)交互的。

在浏览器中按 F12 翻开浏览器控制台,进入网络标签,然后刷新页面或重新触发恳求,就能看到恳求的信息了。

选中恳求并点击预览,就能看到后端回来成果,有没有回来数据一看便知。

写了个数据查询为空的 Bug,你会怎么办?

写了个数据查询为空的 Bug,你会怎么办?

假如发现后端正常回来了数据,那便是前端的问题,检查自己的页面代码来排查为什么数据没在前端显现,比方是不是取错了数据的结构?能够多用 debugger 或 console.log 等方法输出信息,便于调试。

星球同学能够免费阅读前端嘉宾神光的《前端调试通关秘籍》:t.zsxq.com/13Rh4xxNK

假如发现后端未回来数据,那么前端需要先承认下自己传递的参数是否正确。

比方下面的比方,分页参数传的太大了,导致查不到数据:

写了个数据查询为空的 Bug,你会怎么办?

假如发现恳求参数传递的没有问题,那么就需要后端同学帮忙处理了。

经过这种方法,直接就定位清楚了问题的鸿沟,高效~

2、后端验证恳求

接下来的排查便是在后端处理了,首先敞开 Debug 模式,从接受恳求参数开始逐行剖析。

比方先检查恳求参数目标,承认前端有没有按照要求传递恳求参数:

写了个数据查询为空的 Bug,你会怎么办?

究竟谁能保证咱们的同事(或许咱们自己)不是小迷糊呢?即使前端说自己恳求是正确的,但也必须要优先验证,而不是一上来就去剖析数据库和后端程序逻辑的问题。

验证恳求参数目标没问题后,接着逐行 Debug,直到要履行数据库查询。

3、后端验证数据库查询

无论是从 MySQL、MongoDB、Redis,仍是文件中查询数据,为了理解便利,咱们暂且统称为数据库。

上一步中,咱们现已 Debug 到了数据库查询,需要要点重视 2 个点:

1)检查封装的恳求参数是否正确

对于 MyBatis Plus 结构来说,便是检查 QueryWrapper 内的属性是否正确填充了查询条件

写了个数据查询为空的 Bug,你会怎么办?

2)检查数据库的回来成果是否有值

比方 MyBatis Plus 的分页查询中,假如 records 属性的 size 大于 0,表示数据库回来了数据,那么就不用再排查数据库查询的问题了;而假如 size = 0,就要剖析为什么从数据库中查询的数据为空。

写了个数据查询为空的 Bug,你会怎么办?

这一步尤为关键,咱们需要获取到实际发送给数据库查询的 SQL 句子。假如你使用的是 MyBatis Plus 结构,能够直接在 application.yml 配置文件中敞开 SQL 句子日志打印,参阅配置如下:

mybatis-plus:
configuration:
log-impl:org.apache.ibatis.logging.stdout.StdOutImpl

然后履行查询,就能看到完整的 SQL 句子了:

写了个数据查询为空的 Bug,你会怎么办?

把这个 SQL 句子复制到数据库控制台履行,验证下数据成果是否正确。假如数据库直接履行句子都查不出数据,那就承认是查询条件过错了仍是数据库自身就缺失数据。

4、后端验证数据处理逻辑

假如数据库查询出了成果,但终究响应给前端的数据为空,那么就需要在数据库查询句子后持续逐行 Debug,验证是否有过滤数据的逻辑。

比较典型的过错场景是查询出的成果设置到了过错的字段中、或许由于权限问题被过滤和脱敏掉了。

最终

以后再遇到数据查询为空的状况,按照以上过程排查问题即可。排查所有 Bug 的核心流程都是一样的,先收集信息、再定位问题、最终再剖析处理。