2013-03-02 36 views
1

我正在寫一個node.js服務器,它充當客戶端和一個位於該節點下游一步的java服務器之間的API。 js API。 API接受來自客戶端的傳入HTML請求,重新格式化它們,然後將它們發送給java服務器,java服務器返回其對node.js API的答案,並將其返回給客戶端。除了服務器關閉時,這一切都很精彩。我需要趕上這一事件,就像我能趕上一個502或302 ......這裏是我的代碼:node.js錯誤,當一個http.request被髮送到沒有響應的服務器

async.waterfall(
    [   
     function(callback){ 
      var options = { host: 'localhost', port: '8080', 
      path: '/javaServerWork/' + req.query.foo + '?toDo=' + req.query.bar, 
      method: 'GET', 
      headers: { accept: 'application/json' } 
      }; 

      http.request(options, function(response){ 
       response.on('error', function(exception) { Console.log("error here"); } 
       if(response.statusCode == '200'){ callback(null, response); } 
       else if (response.statusCode == '502') { res.send('502'); } 
       else { res.send('not 200 and not 502'); } 
      }).end(); 
     }, 

     function(response){ 
      var javaResponse = ''; 
      response.on('error', function(exception){ Console.log("error here");}); 
      response.on('data', function (chunk){ javaResponse += chunk; }); 
      response.on('end', function(){     
       res.send(javaResponse); 
      }) 
     } 
    ] 
); 

當我開始了這個節點服務器,併發出對Node.js的服務器發出請求,其然後試圖達到Java服務器,Node.js的崩潰和我碰到下面的錯誤在我的控制檯:

events.js:69 throw arguments[1]; // Unhandled 'error' event ^ Error: connect ECONNREFUSED at errnoException (net.js:846:11) at Object.afterConnect [as oncomplete] (net.js:837:19)

所有我需要做的是抓住「沒有響應」當Java服務器宕機,從而使我可以執行另一個函數,或者簡單地將這個事實返回給客戶端,當然,沒有節點崩潰!這可能很簡單,但我沒有發現任何可行的方法。我曾嘗試process.on('uncaughtException'),我試過(如代碼中)response.on('錯誤')。

我是新來的節點,不能看到問題的地方...任何幫助非常感謝!

+0

調用java的服務器以200 [OK]響應完成? – D3V 2013-03-02 17:38:07

+0

是的,它的確如此... – hkuich 2013-03-04 20:34:46

回答

4

你嘗試

http.request(options, function(response){ 
      response.on('error', function(exception) { Console.log("error here"); } 
      if(response.statusCode == '200'){ callback(null, response); } 
      else if (response.statusCode == '502') { res.send('502'); } 
      else { res.send('not 200 and not 502'); } 
}).on('error', function(e) { 
    console.log("handle error here"); 
}).end(); 

聽起來像是被請求對象上拋出的錯誤http.request的回報,而不是響應對象

http://nodejs.org/api/http.html#http_http_request_options_callback

+0

你是對的!我稱之爲'response.on('error')',但我當然需要根據請求調用它...謝謝! – hkuich 2013-03-04 20:35:50

相關問題