2015-07-20 33 views
1

我有一些由域模块包装的http-server。 服务器在某些请求上发送错误。有什么办法来获取请求对象引发错误?Node.js:如何处理错误事件的域模块中的请求对象

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

你是说如果在'createServer'回调中抛出一个异常,那么你的域名不会被捕获错误?在这里真的没有太多的信息.​​..... – James

+0

@James,域捕获错误,一切工作正确,但我需要知道请求参数的更多信息。 – user3796809

回答

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

+0

谢谢,@robertklep,这正是我想要的。 – user3796809