判断对象是否为空失效,无匹配查询时控制台无输出问题排查
问题分析:无匹配查询结果时未触发预期分支且无控制台输出
从你描述的场景和给出的代码片段来看,主要有几个核心问题导致了你遇到的情况,我来逐个拆解说明:
1. isEmpty 函数逻辑不完整,无法正确判断空值
你写的isEmpty函数里的return语句被截断了,这会导致函数完全无法返回有效的判断结果——没有完整的返回逻辑,后续依赖这个函数的分支判断自然会失效。完整可用的isEmpty函数应该是这样的:
function isEmpty(obj) { for (var key in obj) { if (obj.hasOwnProperty(key)) return false; // 只要找到对象的自有属性,就说明非空 } return true; // 遍历完所有属性都没找到,说明对象为空 }
2. 缺失数据库查询的执行与结果处理逻辑
你只定义了查询语句和参数数组,但完全看不到实际执行数据库查询的代码(比如connection.query()这类核心调用),也没有查询结果返回后,判断是否为空、触发else if分支的逻辑。
假设你使用的是常用的mysql模块,完整的流程应该像这样:
user.loginUser = (jUserData, res) => { var aData = [ jUserData.email, jUserData.mobile_number, 0 ]; var sQuery = 'SELECT * FROM users WHERE email = ? AND mobile_number = ? AND active = ?'; // 假设你已经初始化了数据库连接实例connection connection.query(sQuery, aData, (err, results) => { if (err) { console.error('查询执行出错:', err); return res.status(500).send('服务器内部错误'); } // 处理查询结果:数据库返回的results是数组,直接用长度判断更直观 if (results.length > 0) { // 有匹配用户的逻辑 console.log('找到匹配用户:', results[0]); // ...后续业务处理 } else if (results.length === 0) { // 这里也可以用你完善后的isEmpty(results) // 无匹配结果的逻辑,控制台输出必须写在这里才会触发 console.log('未找到符合条件的用户'); // ...返回前端提示等逻辑 } }); function isEmpty(obj) { for (var key in obj) { if (obj.hasOwnProperty(key)) return false; } return true; } };
3. 控制台输出的位置或分支条件错误
如果你的console.log()没有写在else if分支内部,或者分支的判断条件本身不成立(比如isEmpty函数失效导致条件为假),自然看不到任何输出。另外要注意:数据库查询返回的结果是数组类型,哪怕没有匹配数据也是空数组,直接用results.length === 0判断比用isEmpty函数更直接可靠。
额外排查建议
- 先在数据库客户端里手动执行这条SQL语句,确认确实没有匹配结果,排除数据本身的问题;
- 检查数据库连接是否正常,避免因为连接失败导致查询根本没执行。
内容的提问来源于stack exchange,提问作者July333
相关产品推荐
相关产品推荐

