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

在Node.js Express中如何判断Promise返回结果是否包含数据或为空数组

失效原因分析

你目前使用Object.keys(result).length === 0判断失效,通常是两种原因导致:

  • 你的dboperations.getUser返回的result不是直接的查询结果数组,而是数据库操作库封装的元对象,本身自带recordset/rows/affectedRows等内置属性,所以不管查询结果是不是空,这个对象的key长度永远大于0
  • 哪怕result本身是数组,用Object.keys判断也不严谨,数组如果挂载了自定义属性会被计入统计,应该直接用数组的length属性判断

解决步骤

  1. 首先确认返回结果结构
    先在回调里加日志打印result的完整结构,确认查询结果对应的字段:
dboperations.getUser(request.params.userCheck).then(result => {
  console.log('查询返回完整结构:', result) // 运行后看控制台输出,确认结果存在哪个字段里
})
  1. 分场景写判断逻辑

场景1:result本身就是查询结果数组

直接用数组类型判断加长度判断即可:

router.route('/user/:userCheck/').get((request, response) => {
  dboperations.getUser(request.params.userCheck).then(result => {
    if (Array.isArray(result) && result.length === 0) {
      // 空数组逻辑
    } else {
      // 有有效数据逻辑
    }
  }).catch(err => {
    // 补充错误捕获,避免数据库查询报错导致服务异常
    console.error('查询失败:', err)
    response.status(500).send('查询错误')
  })
})

场景2:result是封装的元对象,查询结果在子字段里

比如常见的mssql库查询结果存在recordset字段,mysql库存在rows字段,对应修改判断逻辑即可,示例:

// 以mssql为例,结果存在result.recordset中
if (Array.isArray(result.recordset) && result.recordset.length === 0) {
  // 空数组逻辑
}

内容的提问来源于stack exchange,提问作者tim67

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:00:00