需要更好的Node.js http.get请求错误处理

ttb*_*ack 2 javascript 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")});
Run Code Online (Sandbox Code Playgroud)

但是,如果我发送一个格式错误的请求,这将触发HTTP 400,请求在合成上是不正确的等等,即使response.statusCodein function(response)为400,它最终会导致catch() response.on('end', function() {}而不是发出错误事件http.get(),我想知道为什么会这样.以及如何在node.js上将HTTP 400响应作为错误处理

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

mod*_*tos 11

详细说明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 :-)

  });
Run Code Online (Sandbox Code Playgroud)


jer*_*emy 4

response.statusCode 包含状态代码,您可以在 http.get(...,cb()) 中获取它,或者您可以设置监听器

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

即可获取状态码。如果您想取消 GET,则可以销毁该请求,或者按照您想要的方式处理它。