app.js
_app.configure(function()
{
/**
* app setup
*/
_app.set('port', process.env.PORT || 3000);
_app.use(express.methodOverride());
_app.use(function(req, res, next){
console.log('%s %s', req.method, req.url);
next();
});
_app.use(_app.router);
_app.use(express.static(__dirname+'/public'));
});
process.on('uncaughtException', function (err, req, res) {
console.log( res );
_winston.error(err.message, err.code);
});
当未被捕获时,我可以在控制台中显示消息,但我也想向浏览器发送JSON响应。我怎样才能做到这一点?如何从uncaughtException访问res / req?
谢谢!
答案 0 :(得分:3)
据我所知,这是不可能的,因为未捕获的异常不仅可能发生在快速回调中,而且可能发生在代码中的任何地方。你可能需要的是使用快速错误处理程序:
_app.error(function(err, req, res, next) {
res.json({ ... });
});
答案 1 :(得分:2)
此模块:https://github.com/baryshev/connect-domain通过使用域(http://nodejs.org/api/domain.html)解决了这个问题。这是一个简单的连接中间件,你可以这样使用它(取自他们的github页面):
var
connect = require('connect'),
connectDomain = require('connect-domain');
var app = connect()
.use(connectDomain())
.use(function(req, res){
if (Math.random() > 0.5) {
throw new Error('Simple error');
}
setTimeout(function() {
if (Math.random() > 0.5) {
throw new Error('Asynchronous error from timeout');
} else {
res.end('Hello from Connect!');
}
}, 1000);
})
.use(function(err, req, res, next) {
res.end(err.message);
});
app.listen(3000);
我一直在成功使用此模块,请注意观察您在堆栈中引入connect-domain的位置:https://github.com/baryshev/connect-domain/issues/12