2017-04-18 1 views
0

I habe Probleme aus einem Array API Anrufe an Endpunkte zu machen. Das Array enthält Werte, die ich in den Endpunkt einspeisen muss, um die benötigten Daten zu erhalten. Das Problem, das ich habe, ist, wenn ich die Daten aus dem API-Aufruf, den ich JSON-Text erhalte, mit der Konsole protokolliere. Wenn ich jedoch versuche, den Text zu analysieren und einen bestimmten Wert aus dem JSON-Text zu erhalten, gibt er mir keine Ergebnisse. Hier ist der Code Ich arbeite an:machen mehr api Endpunkt Anrufe von Array NodeJS

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 

ich schätzen würde, wenn jemand bereit wäre, zu erklären, wenn es etwas gibt, ich falsch tat, oder wenn es etwas ist mir fehlt. Vielen Dank!

Antwort

0

Es sieht aus wie Ihre zweite res.on('data') (die mit der try...catch) sollte eigentlich eine res.on('end'), die gefeuert wird, sobald Sie die ganze Datei bekommen haben.

Überprüfen Sie das Beispiel in der offiziellen Node.js Dokumentation aus: https://nodejs.org/api/http.html#http_http_get_options_callback. Beachten Sie, dass sie res.on('data') einmal und res.on('end') einmal verwenden.

Darüber hinaus, Off-Hand sieht es aus wie Sie sollte zumindest etwas analysiert bekommen.

+0

hey danke für die schnelle Antwort, aber das funktioniert nicht. Es ist seltsam, weil ich den gleichen Code für einen anderen Endpunkt verwendet habe und es funktioniert gut. Der einzige Unterschied besteht darin, dass ich am anderen Endpunkt kein Array zum Speichern von Werten zum Verketten des Endpunkts verwendet habe. – learningToCode

+0

Das Problem ist, dass wenn ich das Programm laufen lasse ich "Error parsing JSON" bekomme, was bedeutet, dass der 'try' Block nicht ausgeführt wird. Dies ist kein Problem, wenn ich einen Anruf für meinen anderen Endpunkt mache – learningToCode

+0

Ich denke, der Grund ist, weil du die zweit bist Aufruf ' 'data'' unmittelbar nach dem ersten. Abhängig von der Größe der Nutzlast erhalten Sie möglicherweise den gesamten JSON in nur einer Datenquelle (was wahrscheinlich der Grund dafür ist, dass andere Endpunkte funktionieren), aber für diese benötigt diese Nutzlast mehrere "Daten" -Aufrufe. Allerdings rufst du das nach dem ersten auf, also hast du wahrscheinlich nur die Hälfte des JSON, weshalb es einen Fehler gibt. – samanime