Javascript Node.js中用于生产的错误处理和转发

Javascript Node.js中用于生产的错误处理和转发,javascript,node.js,error-handling,Javascript,Node.js,Error Handling,请注意,我已经设置了一个域来捕获和处理我的应用程序中的异常,并避免应用程序崩溃。它可以工作,但我想如果我在写东西,因为我也有这个代码 app.use(function (err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); })) 对于错误处理,通常会出现一个错误,说明“在设置了之后不能设置头”,这让我相信错误

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

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是一个好主意吗?还是应该是returnerr,然后将错误转发给错误处理程序?。我对处理这个问题的理想方式有点困惑。我想我已经找到了解决问题的办法

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

这不是问题的答案,但“标题已发送”错误通常应该得到修复,而不是处理,因为这是您在某个地方造成的逻辑缺陷,您试图在输出内容后设置标题。