如何处理http请求中的错误?
此处将完整错误返回给客户端。如何将错误写入日志并将Fatal error
返回给客户端?
Express v4.4.4
var express = require('express'),
app = express(),
domain = require('domain'),
port = 3000;
app.use(function(err, req, res, next){
console.error(err.stack);
res.send('Fatal error!', 500);
});
app.get('/', function(req, res){
var d = domain.create();
d.on('error', function(err){
console.error('Error', err);
res.send('Fatal error!', 500);
});
d.add(req);
d.add(res);
d.run(function(){
// a is undefined
a.ddd();
res.send('Success!');
});
})
.listen(port, function(){
console.log('Express server listening on port '+port);
});
答案 0 :(得分:3)
错误处理程序的.use需要位于底部,可能会导致错误的routes / handlers / middlewhare之后。然后从其他地方调用next(错误)而不是直接返回错误消息
// this comes first
app.get('/', function(req, res, next){ // note the addition of next
var d = domain.create();
d.on('error', function(err){
next(err); // pass the error on to the next middleware
});
// ...
});
// this comes last
app.use(function(err, req, res, next){
console.error(err.stack);
res.send('Fatal error!', 500);
});
答案 1 :(得分:0)
错误处理中间件的定义与常规中间件一样,但必须使用4的arity定义,即签名(err,req,res,next):
例如代码:
app.use(function(err, req, res, next){
console.error(err.stack);
res.send(500, 'Something broke!');
});