我有一些由域模块包装的http服务器。 服务器在某些请求上发送错误。是否有任何方法来获取引发错误的请求对象?
var http = require('http');
var domain = require('domain');
var d = domain.create();
d.on('error', function(err) {
console.error("Sorry, dude, we have a problem");
console.error(err.stack);
});
d.run(function() {
http.createServer(function(req, res) {
someBadFunction();
res.end();
}).listen(8080);
}
);
答案 0 :(得分:0)
您可以将请求添加到域中,并在错误处理程序中将其过滤掉:
d.on('error', function(err) {
var req = d.members.filter(function(member) {
return member instanceof http.IncomingMessage;
})[0];
d.remove(req);
...
});
d.run(function() {
http.createServer(function(req, res) {
d.add(req);
someBadFunction();
res.end();
}).listen(8080);
});
但是,如果我要使用域(它们已被弃用),我会为每个请求创建一个新域(根据this documentation),而不是将每个请求添加到顶级域,因为我不要认为上面的代码可以正常处理任何合理数量的请求。