如何判断Node.js数据库查询返回的结果是否为空?
问题原因
你的写法存在三个核心问题:
- 你用的
db.each方法的行回调仅在查询到匹配记录时逐行触发,没有查询到结果时回调根本不会执行,所以写在回调内的else分支永远不会被触发。 - JS中对象为引用类型,直接用
res != {}做判断没有任何意义,该表达式永远返回true——引用类型的相等比较判断的是内存地址是否相同,两个独立的空对象地址永远不一致。 - 你尝试的
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
相关产品推荐
相关产品推荐

