2016-01-22 37 views
0

請設置一個域來捕獲和處理我的應用程序中的異常,並避免應用程序崩潰。它的作品,但我想,如果我正在做寫事情,因爲我也有這個代碼在Node.js中進行生產中的錯誤處理和轉發

app.use(function (err, req, res, next) { 
res.status(err.status || 500); 
res.render('error', { 
    message: err.message, 
    error: {} 
}); 

});

錯誤處理和通常,我得到一個錯誤,指出「無法設置標頭後設置」,這使我相信錯誤處理中間件已在照顧。我需要引導的一點點提高的Node.js的有效方式錯誤處理的理解 碼域的

app.use(function(req, res, next){ 
var reqDomain = domain.create(); 
reqDomain.add(req); 
reqDomain.add(res); 
reqDomain.on('error', function(err){ 
    console.log(err); 
    res.statusCode = 500; 
    res.render('errorpage'); 
}); 
reqDomain.run(next); 

});

以此代碼段爲例,假設有錯誤,錯誤將如何被掛起。

router.get('/usermanage',checkloggedIn.isAdminOrProfessor,function(req,res){ 
    User.find({}, function(error,data){ 
     if(error){ 
      console.log(error) 
      res.render('errorpage'); 
     } else{ 
      console.log(data) 
      res.render('ManageUsers',{mydata:data,SuccessMessage: req.flash('SuccessMessage'), ErrorMessage: req.flash('ValidationError')}); 

     } 
    }); 

}); ,如果回調返回和錯誤,或者它應該返回err,然後轉發錯誤到錯誤處理程序?是否渲染errorpage是一個好主意?我對處理這個問題的理想方式有點困惑。任何期望的建議是非常讚賞

+2

不是問題的答案,而是*「已發送的頭文件」*錯誤應該一般是固定的,而不是處理的,因爲它是一個邏輯缺陷,你試圖在內容輸出後設置頭文件。 – adeneo

回答

0

我想我找到了解決我的問題

router.get('/usermanage',checkloggedIn.isAdminOrProfessor,function(req,res,next){ 
    User.find({}, function(error,data){ 
     if(error){ 
      console.log(error) 
      next(error) 
     } else{ 
      console.log(data) 
      res.render('ManageUsers',{mydata:data,SuccessMessage: req.flash('SuccessMessage'), ErrorMessage: req.flash('ValidationError')}); 

     } 
    }); 

我的錯誤轉發到的ErrorHandler中間件和與我爲每個404和500錯誤定義了兩個。這對我來說效果很好。