2015-07-20 35 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