【问题标题】:Error handling and forwarding in Node.js for production用于生产的 Node.js 中的错误处理和转发
【发布时间】:2016-01-22 16:51:32
【问题描述】:

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

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

});

以这段代码sn-p为例,假设有错误,错误将如何挂起。

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

       }
    });

}); 如果回调返回和错误,则呈现错误页面是个好主意,还是应该返回错误,然后将错误转发给错误处理程序?我对处理这个问题的理想方式有点困惑。任何期望的建议将不胜感激

【问题讨论】:

  • 不是问题的答案,但 "headers already sent" 错误通常应该被修复,而不是处理,因为这是你在某处制造的逻辑缺陷,试图输出内容后设置标题。

标签: javascript node.js error-handling


【解决方案1】:

我想我找到了解决问题的方法

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 错误定义了两个。这对我很有效。

【讨论】:

    猜你喜欢
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多