我有这个简单的代码。这必须在每次请求时向我显示我的错误对象({error:'error'})。但它只显示“[Object object]”。 而且 - 调试器永远不会在错误处理函数中停止。 发生了什么事?
var domain = require('domain');
var express = require('express');
var server = express();
server.get('/', function(req, res)
{
var d = domain.create();
d.on('error', function(e)
{
debugger;
console.log(JSON.stringify(e));
});
d.run(function()
{
throw {error:'error'};
res.send('ok');
});
});
server.listen(8080);
答案 0 :(得分:0)
问题是域在调用堆栈的底部一直捕获错误,并且由于express有自己的错误处理代码,错误会在到达域之前被express捕获。类似的问题:Node.js - Domain per Express request, inside another domain
我没有看到任何特别好的理由应该是这样的,但这就是代码的工作方式[1](来源:https://github.com/joyent/node/blob/master/lib/domain.js)。可能的解决方法是使用您自己的d.run()
围绕try/catch
来电,或者执行类似
d.run(process.nextTick(function() {
// do stuff
}));
[1]域的工作方式是它们基本上挂钩了所有的"异步"回调并添加一些记录启动异步操作的人的信息。我不知道他们为什么不尝试/捕捉初始同步块。