需要更好的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.statusCode
在function(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 :-) });