在Node.js Express中如何判断Promise返回结果是否包含数据或为空数组
失效原因分析
你目前使用Object.keys(result).length === 0判断失效,通常是两种原因导致:
- 你的
dboperations.getUser返回的result不是直接的查询结果数组,而是数据库操作库封装的元对象,本身自带recordset/rows/affectedRows等内置属性,所以不管查询结果是不是空,这个对象的key长度永远大于0 - 哪怕
result本身是数组,用Object.keys判断也不严谨,数组如果挂载了自定义属性会被计入统计,应该直接用数组的length属性判断
解决步骤
- 首先确认返回结果结构
先在回调里加日志打印result的完整结构,确认查询结果对应的字段:
dboperations.getUser(request.params.userCheck).then(result => { console.log('查询返回完整结构:', result) // 运行后看控制台输出,确认结果存在哪个字段里 })
- 分场景写判断逻辑
场景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
相关产品推荐
相关产品推荐

