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错误定义了两个。这对我来说很好。这不是问题的答案,但“标题已发送”错误通常应该得到修复,而不是处理,因为这是您在某个地方造成的逻辑缺陷,您试图在输出内容后设置标题。