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

如何判断Node.js数据库查询返回的结果是否为空?

问题原因

你的写法存在三个核心问题:

  1. 你用的db.each方法的行回调仅在查询到匹配记录时逐行触发,没有查询到结果时回调根本不会执行,所以写在回调内的else分支永远不会被触发。
  2. JS中对象为引用类型,直接用res != {}做判断没有任何意义,该表达式永远返回true——引用类型的相等比较判断的是内存地址是否相同,两个独立的空对象地址永远不一致。
  3. 你尝试的Objects.keys(res).lenght存在两处拼写错误:正确写法是Object.keys(res).length,但就算拼写正确,放在db.each的回调里也无法解决查询无结果时回调不执行的问题。

解决方案

根据你的使用场景选择以下两种方案即可:

方案1:仅判断是否存在匹配记录

使用db.get方法,它最多返回第一条匹配的记录,无匹配时返回undefined,直接判断返回值是否存在即可:

db.get(`SELECT category FROM categories WHERE category = ?`, [category], (err, row) => {
    // 先处理查询报错
    if (err) {
        console.error('查询出错:', err)
        return
    }
    if (row) {
        console.log("Not Empty")
    } else {
        console.log("Empty")
    }
})

方案2:需要获取所有匹配记录再判断

使用db.all方法,它会将所有匹配记录放在数组中返回,无匹配时返回空数组,判断数组长度即可:

db.all(`SELECT category FROM categories WHERE category = ?`, [category], (err, rows) => {
    if (err) {
        console.error('查询出错:', err)
        return
    }
    if (rows.length > 0) {
        console.log("Not Empty")
        // 此处可遍历rows处理所有查询结果
    } else {
        console.log("Empty")
    }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:15:03