Mongoose停止接受对其某些功能的回调
回答 5
浏览 1.3万
2023-02-27
我使用.save()和.findOne()的回调已经好几天了,就在今天,我遇到了这些错误:
throw new MongooseError('Model.prototype.save() no longer accepts a callback')
MongooseError: Model.prototype.save() no longer accepts a callback
和
MongooseError: Model.findOne() no longer accepts a callback
考虑到文档中至少对.findOne()的回调仍被接受,这真的很令人尴尬。
app.post("/register", (req, res) => {
const newUser = new User({
email: req.body.username,
password: req.body.password
});
newUser.save((err) => {
if (err) console.log(err)
else res.render("secrets");
});
});
这是我以前使用Express和mongoose时的做法。请让我知道如何修复它。
你应该使用 await 和 try/catch 来处理这个问题。另外,当创建一个新的用户时,我建议用User.create()代替。
- Geri Dremák 2023-02-27
5 个回答
#1楼
已采纳
得票数 7
MongooseError: Model.find() no longer accepts a callback
因为从现在开始,回调函数已经被废弃了。 如果你使用带有回调的这些函数,请使用async/await或者promises,如果async函数对你不适用的话。
app.get("/articles", async (req, res) => {
try {
const articles = await Article.find({ });
res.send(articles);
console.log(articles);
} catch (err) {
console.log(err);
}
});
#2楼
得票数 3
大家好!Mongoose刚刚做了一个新的更新,Mongoose现在已经摆脱了回调。所以这意味着,现在不用再做这个
//Old way ( doesn't work anymore )
data.save((err, result) => {
if(!err) console.log(result);
})
你应该像这样做!
//New way ( use this in your projects )
const result = await data.save() // Make sure to wrap this code in an async function
console.log(result);
这也适用于其他每一个mongoose的回调
#3楼
得票数 2
// old way (deprecated)
Model.find(function(err, models){
if (err) {
console.log(err);
}else {
console.log(models);
}
});
// new way
Model.find()
.then(function (models) {
console.log(models);
})
.catch(function (err) {
console.log(err);
});
当我研究和更新我的代码时,这对我很有效。祝您好运!
- Sheriff 2023-03-19
#4楼
得票数 1
app.post("/register", function(req, res){
const newUser = new User({
email: req.body.email,
password: req.body.password
});
newUser.save().then(()=>{
res.render("secrets");
}).catch((err)=>{
console.log(err);
})
});
希望对你有帮助!
#5楼
得票数 0
app.post("/login",function(req,res){
const username = req.body.username;
const password = req.body.password;
User.findOne({email:username})
.then((foundUser) => {
if(foundUser){
if(foundUser.password === password){
res.render("secrets");
}
}
})
.catch((error) => {
//When there are errors We handle them here
console.log(err);
res.send(400, "Bad Request");
});
});
这对我有用,我也在做 angela yu 的web dev bootcamp。
现在看来,你必须使用=>then和=>catch来进行处理。
这就是我修复错误的原因。我只是不明白它是如何从一天变成另一天的。昨天还完全正常,今天运行时却出现了错误。谢谢你的帮助!
- pablofdezr 2023-02-27
是的,这是从一天到另一天。
- Gorka Zamorano 2023-02-28
我也在学习你提到的同样的课程。我刚刚完成了后端部分&;现在正向React进发。由于Angela Yu到处解释回调函数,对我来说,把回调改为async await或promises是很难做到的。总之,很高兴在这里看到你。
- Sunny 2023-03-19