【问题标题】:making multiple api endpoint calls from array nodejs从数组nodejs进行多个api端点调用
【发布时间】:2017-09-14 20:58:50
【问题描述】:

我无法从数组调用 API 端点。该数组包含我需要输入端点以获取所需数据的值。我遇到的麻烦是当我控制台记录来自 api 调用的数据时,我收到 JSON 文本。但是,当我尝试解析文本并从 JSON 文本中获取特定值时,它并没有给我结果。这是我正在处理的代码:

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

如果有人愿意解释我是否做错了什么,或者我是否遗漏了什么,我将不胜感激。谢谢!

【问题讨论】:

    标签: javascript json node.js


    【解决方案1】:

    看起来您的第二个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')

    除此之外,看起来你至少应该解析一些东西。

    【讨论】:

    • 您好,感谢您的快速响应,但是,这不起作用。这很奇怪,因为我对另一个端点使用了相同的代码并且它工作正常。唯一的区别是在另一个端点中我没有使用数组来存储值来连接端点。
    • 问题是,当我运行程序时,我得到“解析 JSON 时出错”,这意味着 try 块没有被执行。当我为其他端点拨打电话时,这不是问题
    • 我认为原因是因为您在第一个之后立即调用第二个'data'。根据有效负载的大小,您可能会在一个数据中获取整个 JSON(这可能是其他端点工作的原因),但对于这个,该有效负载需要多次 data 调用。但是,您在第一个之后调用它,因此您可能只有一半的 JSON,这就是它引发错误的原因。
    • 有趣的是它有时会起作用,例如在最初调用几个小时后它不起作用,但它给了我想要的结果..奇怪
    • 这对我所说的更有利。如果有效载荷足够小(或足够快)以进行一次数据调用,它就会起作用。如果它更大,则必须多次调用 .on('data'),但您的代码会在第一次之后尝试解析 JSON。
    猜你喜欢
    • 2021-07-13
    • 1970-01-01
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2016-12-16
    • 2017-11-14
    • 1970-01-01
    相关资源
    最近更新 更多