2017-04-18 9 views
0

配列からAPIエンドポイントを呼び出す際に問題があります。配列には、必要なデータを取得するためにエンドポイントにフィードするために必要な値が含まれています。私が抱えている問題は、JSONテキストを受け取るAPIコールからデータをログに記録するときです。しかし、テキストを解析してJSONテキストから特定の値を取得しようとすると、結果が得られません。ここで私は働いているコードです:何かがあれば配列nodejsから複数のapiエンドポイント呼び出しを作成する

var http = require("http"); 
var areaCodes = ["'0071950')", "'0072850')", "'0073450')", "'0075700')", "'0076450')", "'0078700')", "'0900001')", "'0900000')"]; 
var results = []; 
var encode = []; 

    //source: http://stackoverflow.com/questions/17811827/get-a-json-via-http-request-in-nodej 
for(var i = 0; i < areaCodes.length; i++){ 
    var realmStatus = "http://api.dol.gov/V1/Statistics/OES/OE_SERIES/?KEY=XXXXXXXXXXXXXXXXXXXXXXXXXX&$filter=(OCCUPATION_CODE eq '151131') and (AREA_CODE eq " + areaCodes[i]; 
    encode.push(encodeURI(realmStatus)); 

var options = { 
     host: 'api.dol.gov', 
     path: encode[i], 
     type: 'GET', 
     dataType: 'json', 
     headers: {'accept' : 'application/json'} 
}; 
console.log("Start"); 
var x = http.request(options,function(res){ 
    console.log("Connected"); 
    var str = ''; 
    res.on('data', function(chunk) { 
     str += chunk; 
    }); 
    res.on('data',function(data){ 
     if(res.statusCode == 200){ 
      //console.log("res status is good"); 
      try{ 
       var dataA = JSON.parse(str); 
       //run a for loop 
       for(var h = 0; h < dataA.d.results.length; h++){ 
        var seriesNum = dataA.d.results[h].SERIES_ID; 
        array.push(seriesNum); 
        console.log(seriesNum); 
       } 
       //end for 
      }catch(e){ 
       console.log('Error parsing JSON'); 
      } 
     } 
    }); 
}); 
x.end(); 
}//end for loop 

誰かが説明ことをいとわない場合、私は間違っていたものがある場合、私は感謝したい、または私が行方不明です。ありがとう!

答えて

0

2番目のres.on('data')try...catchのあるもの)のように見えるのは、実際にはファイル全体を取得した後に起動されるres.on('end')です。

公式のNode.jsドキュメントの例を参照してください:https://nodejs.org/api/http.html#http_http_get_options_callback。彼らはres.on('data')を1回、res.on('end')を1回使用することに注意してください。

それ以外では、少なくとも、何かを解析する必要があるように見えます。

+0

しかし、すばやい応答をいただきありがとうございますが動作しません。私は別のエンドポイントで同じコードを使用していて、うまく動作するので奇妙です。唯一の違いは、もう一方のエンドポイントでは、エンドポイントを連結する値を格納するために配列を使用しなかったことです。 – learningToCode

+0

問題は、プログラムを実行すると「エラー解析JSON」という意味ですが、「試行」ブロックが実行されていないことを意味します。これは私の他のエンドポイントを呼び出すときには問題ではない – learningToCode

+0

私は、その理由は、あなたが最初のものの直後に2番目の '' data''を呼んでいるからだと思います。ペイロードのサイズにもよりますが、JSON全体を1つのデータ(おそらく他のエンドポイントが動作する理由)に入れることができますが、このペイロードには複数の 'data'呼び出しが必要です。しかし、これを最初から呼び出しているので、おそらくJSONの半分しか持っていないので、エラーが発生します。 – samanime

関連する問題