簡體   English   中英

在 Node.JS 中處理錯誤的正確方法是什么?

[英]What is the proper way to handle an error in 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, 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"); 
});
});
    
    

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

})

希望它有助於解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM