2017-04-18 17 views
0

我無法從數組調用API端點。該數組包含我需要輸入到端點的值,以便獲取我需要的數據。我遇到的麻煩是當我通過API調用登錄數據時,我收到了JSON文本。但是,當我嘗試解析文本並從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

它看起來像你的第二個res.on('data')(與try...catch一個)應該實際上是一個res.on('end'),這是一旦你得到整個文件被解僱。

查看官方Node.js文檔中的示例:https://nodejs.org/api/http.html#http_http_get_options_callback。注意他們一次使用res.on('data')一次,res.on('end')使用一次。

除此之外,副手看起來至少應該分析一些東西。

+0

嘿感謝您的快速反應,但是,這是行不通的。這很奇怪,因爲我爲另一個端點使用了相同的代碼,並且工作正常。唯一的區別是在另一個端點中,我沒有使用數組來存儲值來連接端點。 – learningToCode

+0

問題是,當我運行程序時,我得到「Error parsing JSON」,意思是'try'塊沒有被執行。當我撥打我的另一個端點時,這不是問題 – learningToCode

+0

我認爲原因是因爲您在第一個端點後立即調用第二個「data」。根據有效負載的大小,您可能只在一個數據中獲得完整的JSON(這可能是其他終端工作的原因),但對於這一個,該有效負載需要多個「數據」調用。不過,你在第一個之後調用了這個,所以你可能只有JSON的一半,這就是它拋出錯誤的原因。 – samanime