Node.js后端查询MongoDB用户时返回Undefined问题求助
问题原因与修复方案
核心错误点
- Mongoose 的
find()方法返回的是符合查询条件的文档数组,哪怕数据库中只有一条匹配记录,得到的user变量也是数组结构,数组本身没有_id属性,所以取user._id必然是 undefined。 - 同时你当前的空值判断逻辑也存在问题:
find()没有匹配结果时会返回空数组[],空数组在布尔判断中为true,所以if (!user)的分支永远不会触发,哪怕没有匹配用户也会走到返回200的分支。
修复方案
将 find() 替换为返回单个文档对象的 findOne() 方法即可,修改后代码如下:
router.route('/exists').post((req, res) => { User.findOne({ UserName: req.body.username }) .then(user => { if (!user) { res.status(404).json({ status: 404 }) } else { console.log(user._id) res.status(200).json({ _id: user._id }) } }) .catch(err => res.status(400).json(err)) })
替代方案
如果你坚持要使用 find() 方法,可以取数组第一个元素的属性,对应调整判断逻辑即可:
// 仅作为替代参考,单条查询优先使用findOne() router.route('/exists').post((req, res) => { User.find({ UserName: req.body.username }) .then(user => { if (user.length === 0) { res.status(404).json({ status: 404 }) } else { console.log(user[0]._id) res.status(200).json({ _id: user[0]._id }) } }) .catch(err => res.status(400).json(err)) })
内容的提问来源于stack exchange,提问作者ndsmith
相关产品推荐
相关产品推荐

