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

Javascript Node.js:如何在发生错误事件时处理域模块中的请求对象,javascript,node.js,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

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

您可以将请求添加到域中,并在错误处理程序中将其过滤掉:

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);
});

但是,如果我要使用域(它们已被弃用),我会为每个请求创建一个新域(按照),而不是将每个请求添加到顶级域,因为我认为上面的代码无法正常处理任何合理数量的请求。

您可以将请求添加到域,并在错误处理程序中将其过滤掉:

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);
});

但是,如果我要使用域(它们已被弃用),我会为每个请求创建一个新域(按照),而不是将每个请求添加到顶级域,因为我认为上面的代码无法正常工作,任何合理数量的请求都会传入。

您是说如果在
createServer
回调中抛出异常,您的域不会捕获错误吗?这里真的没有太多信息可供讨论……@James,域捕获错误,一切正常,但我需要知道请求参数以获取更多信息。你是说如果在
createServer
回调中抛出异常,你的域不会捕获错误吗?这里真的没有太多信息可供讨论……@James,域捕获错误,一切正常,但我需要知道请求参数以获取更多信息。谢谢,@robertklep,这正是我想要的。谢谢,@robertklep,这正是我想要的。