Node.js:如何在错误事件中处理域模块中的请求对象

时间:2015-07-20 14:27:32

标签: javascript node.js

我有一些由域模块包装的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);
    }
);

1 个答案:

答案 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),而不是将每个请求添加到顶级域,因为我不要认为上面的代码可以正常处理任何合理数量的请求。