MongoDB find查询结果无法访问email字段问题排查求助(附Node.js+Express代码)
解决Nodemailer场景下
data.email返回undefined的问题 Hey there, let's fix that undefined issue you're hitting when trying to access the user's email!
问题根源
你用的Post.find()方法在Mongoose里返回的是一个文档数组——哪怕你的查询只匹配到一个用户,结果也会被包裹在数组里。所以你直接调用data.email的时候,本质上是在给数组对象找email属性,自然会得到undefined。
你说console.log(data)能看到用户详情,那打印出来的内容应该是类似这样的数组:
[ { _id: ObjectId("xxx"), email: "user@example.com", unique: "abc123", ... } ]
两种可行的解决方案
方案1:改用findOne()(推荐)
如果你确定查询条件unique: post.unique_name只会匹配到一个用户,直接用findOne()方法,它会返回单个文档对象,这样就能直接访问data.email了:
Post.findOne({unique : post.unique_name},function(err, data) { if(err) { console.log(err); return; } // 现在可以正常拿到邮箱了 console.log(data.email); })
方案2:从数组中取第一个元素
如果坚持使用find(),那就需要访问数组的第一个元素来获取用户对象:
Post.find({unique : post.unique_name},function(err, data) { if(err) { console.log(err); return; } // 先检查数组是否有数据,避免下标越界报错 if(data.length > 0) { console.log(data[0].email); } else { console.log("No matching user found"); } })
额外提示
记得在代码里处理查询错误和无匹配结果的情况,这样后续用Nodemailer发邮件时才不会因为意外情况崩溃哦~
内容的提问来源于stack exchange,提问作者karan chugh
相关产品推荐
相关产品推荐

