【问题标题】:What is the proper way to handle an error in Node.JS?在 Node.JS 中处理错误的正确方法是什么?
【发布时间】:2020-12-02 11:18:21
【问题描述】:

此发布请求创建一个新用户帐户并为用户保存一个测试分数数据点。

~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, 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"); 
});
});
    
    

【问题讨论】:

    标签: node.js mongodb mongoose error-handling syntax-error


    【解决方案1】:

    您可以使用try-catchasync-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)
       }
    
    })
    

    希望它能帮助您解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-16
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      相关资源
      最近更新 更多