5

我使用以下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.statusCodeinfunction(response)是 400,它最终会导致catch() response.on('end', function() {}而不是在 上发出错误事件http.get(),我想知道为什么会这样以及如何将 HTTP 400 响应作为 node.js 上的错误处理。

如果它到达catch(e),它会等待很长时间,直到它向客户端响应任何内容,这也很奇怪。我希望服务器尽快响应客户端达到 400。

4

2 回答 2

14

详细说明 jeremy 的答案,这是一个检查适用于我的状态代码的示例:

  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 :-)

  });
于 2015-03-24T10:58:25.203 回答
4

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

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

可以获取状态码。然后,如果您想取消 GET,则可以销毁该请求,或者根据需要处理它。

于 2012-11-15T18:22:04.463 回答