2012-11-15 61 views
1

我用以下http.get()調用調用本地端點:需要更好的Node.js http.get請求錯誤處理

http.get({ 
    host: 'localhost', 
    port: 80, 
    path: '/service/info?id=' + id 
}, function(response) { 
      console.log(response); 
    response.setEncoding('utf8'); 
    var data = ""; 

    response.on('data', function(chunk) { 
     data += chunk; 
    }); 

    response.on('end', function() { 
     if(data.length > 0) { 
      try { 
       var data_object = JSON.parse(data); 
      } catch(e) { 
       return; 
      } 
     } 
    }); 
}).on("error", function(){console.log("GET request error")}); 

但是,如果我發送一個畸形的請求,這會觸發一個HTTP 400,請求是綜合不正確等,即使在function(response)response.statusCode是400,這將在http.get()最終的catch() response.on('end', function() {},而不是發出錯誤的事件,我不知道爲什麼是這樣的話,如何我可以處理HTTP 400響應,對節點的錯誤。 JS。

如果它進入catch(e),它會等待很長一段時間,直到它反應什麼給客戶端,這也是很奇怪。我希望服務器儘快響應客戶端,它會觸及400。

回答

3

response.statusCode包含狀態代碼,你可以得到在http.get(...,CB()),也可以建立一個監聽

 
    request.on('response', function (response) {}); 

,可以得到狀態代碼。然後,您可以銷燬請求,如果您想取消GET,或者按照您的要求處理它。

+0

我明白了,我會嘗試,事件 – ttback

8

在闡述傑里米的答案,這裏是檢查狀態代碼爲我的作品的一個例子:

http.get(url, function (res) { 
    if (res.statusCode != 200) { 
     console.log("non-200 response status code:", res.statusCode); 
     console.log("for url:", url); 
     return; 
    } 
    // do something great :-) 

    });