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()。なぜそうなるのでしょうか。そして、node.jsでHTTP400応答をエラーとして処理する方法。

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 に答える