Node.js+Mongoose中Promise返回值异常排查求助
问题定位与修复方案
我来帮你揪出这个Promise返回值的问题,先看你代码里的几个关键错误:
完全无效的条件判断:你写的
if(null)永远不会成立,因为null是布尔假值,这个条件等价于if(false),所以不管查询结果res是什么,代码都会直接走到else分支返回res,根本不会触发resolve(null)。另外要注意:Mongoose的
model.find()返回的是数组——就算没有匹配到任何文档,它返回的也是空数组[],而不是null或undefined,所以你需要判断数组的长度来确认是否有结果。冗余的Promise嵌套:你已经用
async修饰了函数,但又手动返回一个新的Promise,这完全没必要——async函数本身就会自动把返回值包装成Promise,直接用await简化代码即可。日志调试的小问题:第二个
console.log("pumasok sa checkfbid" + query)会把对象类型的query打印成[object Object],不如统一用JSON.stringify()来输出完整的查询参数,方便调试。
修正后的代码示例
/** check if may fb_id */ module.exports.checkfbid = async (model, query = {}) => { // 直接给query设置默认值,省去额外的if判断 console.log("pumasok sa checkfbid:", JSON.stringify(query)); const res = await model.find(query); console.log("hindi pa napapalitan:", res); if (res.length === 0) { console.log("没有匹配的记录,返回null"); return null; } else { console.log("untouched:", res); return res; } };
额外建议
如果你的需求是查找单个匹配的文档,推荐用model.findOne(query)替代model.find()——它会返回单个文档对象,没有匹配时返回null,这样判断逻辑可以更简洁:
const res = await model.findOne(query); if (!res) return null; return res;
内容的提问来源于stack exchange,提问作者Quer
相关产品推荐
相关产品推荐

