需要更好的Node.js http.get请求error handling

我使用下面的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,请求是综合不正确的,等等,即使response.statusCodefunction(response)是400,它将最终到catch() response.on('end', function() {}而不是在http.get()上发出错误事件,我想知道为什么是这种情况,以及如何处理HTTP 400响应作为node.js上的错误。

如果要catch(e) ,等待很长时间,直到它对客户反应,这也是奇怪的。 我希望服务器尽快响应客户端的命中。

response.statusCode包含状态码,你可以在http.get(…,cb())中获得,或者你可以设置一个监听器

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

那可以得到状态码。 然后你可以销毁请求,如果你想取消GET,或者处理它,但是你想要的。

详细解释jeremy的答案,下面是一个检查适用于我的状态代码的例子:

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