我目前正在和猫鼬一起工作,我遇到过一些我觉得非常奇怪的事情。
我的代码如下:
Challenge.findOneAndUpdate({ _id: req.params.challengeId, users: req.user._id }, { $push: { submissions: submission._id } }, { new: true })
.then(function(err, challengeUpdated) {
console.log(challengeUpdated);
console.log(err);
if (err) {
console.log('The error is : ');
console.log(err);
return res.status(401).json({ message: 'Error saving submission' });
}
else {
return res.json(submission);
}
})
请注意我的function(err, challengeUpdated)
如何在这里的文档:http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate,它说它应该是这样的,但是当我记录它们时我err
打印对象,并且challengeUpdated打印undefined / null。改变周围的参数似乎是我的黑客,所以我想知道是否有一些明显我在这里做错了。
注意:req.user._id
可能不在users
。这是我想要找到的错误。
看看这个问题的答案:Mongoose: findOneAndUpdate doesn't return updated document,似乎答案与我的答案相同。
希望别人遇到这个问题?
注意:我正在使用mongoose v5.5.1。
答案 0 :(得分:2)
您的问题是您在基于Promise的代码中使用error-first callback arguments。
使用Promise
界面时应该如何:
Challenge.findOneAndUpdate({ _id: req.params.challengeId, users: req.user._id }, { $push: { submissions: submission._id } }, { new: true })
.then((challengeUpdated) => {
console.log('Success!')
console.log(challengeUpdated)
})
.catch((err) => {
console.error('An error occured', err)
})
function(err, result) { }
是为回调式代码保留的模式,不适用于Promises。