在Node.js中进行错误处理和转发以进行生产

时间:2016-01-22 16:51:32

标签: javascript node.js error-handling

请设置一个域来捕获和处理我的应用程序中的异常,并避免应用程序崩溃。它可以工作,但我想,如果我正在写写东西,因为我也有这个代码

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')});

       }
    });

}); 并且如果回调返回和错误,或者它应该返回错误,然后将错误转发给错误处理程序,那么渲染errorpage是个好主意吗?我对理想的处理方式感到困惑。任何期望的建议都将非常感激

1 个答案:

答案 0 :(得分: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')});

       }
    });

我将错误转发给错误处理程序中间件,并为此我为每个404和500错误定义了两个错误。这对我很有用。