如何解决在Node.JS中处理错误的正确方法是什么?
此发布请求创建了一个新的用户帐户,并为用户保存了一个测验分数数据点。
〜1/20个左右的用户遇到错误,并被重定向回上一页,从而失去了搜索结果。
我无法复制错误或在日志中看到任何错误。
正在寻求有关如何更改我的错误处理以及对为什么会发生这种错误的任何见解的建议。
谢谢!
router.post("/test",function(req,res){
User.findOne({username: req.body.username},function(err,existingUser) {
console.log('user exists:' + existingUser)
if (err) {
return done(err);
}
if (!existingUser) {
var newUser = new User({username: req.body.username});
User.register(newUser,req.body.password,user){
user.testscore = req.body.testscore;
user.save()
if(err){
req.flash("error",err.message);
console.log(err)
res.redirect('back')
return res.render("register");
}
passport.authenticate("local")(req,res,function(){
res.redirect("/thank-you");
});
});
解决方法
您可以将try-catch
和async-await
一起使用来进行错误处理。我会这样写代码。
router.post('/test',async (req,res) => {
try {
const user = await User.findOne({username: req.body.username})
if (!user) {
let newUser = new User({username: req.body.username});
// If User.register returns promise then here also you can use await like above.
// If any error occurs catch block will catch it and show the error.
User.register(newUser,req.body.password,function(err,user) {
user.testscore = req.body.testscore;
user.save()
if(err) {
req.flash("error",err.message);
console.log(err)
res.redirect('back')
return res.render("register");
}
passport.authenticate("local")(req,res,function() {
res.redirect("/thank-you");
});
});
}
} catch (err) {
console.error(err.message)
}
})
希望它有助于解决您的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。