You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

判断对象是否为空失效,无匹配查询时控制台无输出问题排查

问题分析:无匹配查询结果时未触发预期分支且无控制台输出

从你描述的场景和给出的代码片段来看,主要有几个核心问题导致了你遇到的情况,我来逐个拆解说明:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:47:29