首页 > 解决方案 > 如何使用节点 js 存储来自 https 响应的数据?

问题描述

我创建了一个调用 http/https 链接的服务。我能够成功调用 http/https 链接,但我无法存储链接返回的输出。我知道由于异步操作,这非常困难。如果有任何方法可以存储检索到的数据,请提供帮助

下面是我的代码。我尝试创建一个全局变量,然后存储检索到的数据,但它不起作用。

function apiCall(url, protocol) {
function externalApi(url, callback) {
    try {
        var https = $.require(protocol);
        var request = https.request(url, function (response) {
            var str = '';
            var statusCode = response.statusCode;
            var headers = response.headers;
            response.on('data', function (data) {
                str += data;
            });
            response.on('end', function () {
                console.log("Data is " + str);
                console.log("Status Code is " + statusCode);
                console.log("Header is " + JSON.stringify(headers));
                callback(str, statusCode);
            });
        });

        request.on('error', function (e) {
            console.log('Problem with request: ' + e.message);
            console.log('Problem with request: ' + e);
        });
        request.end();
    } catch (err) {
        console.log("the error is" + err);
    }
}
var status = function (data, statusCode) {
    var callStatus = {};
    if (statusCode == 200) {
        callStatus.retrievedData = data;
        callStatus.statusCode = statusCode;
        callStatus.MESSAGE = "Successfully called";
    } 
    console.log(callStatus);
};
externalApi(url, status);
}

预期的结果是返回检索到的数据或将检索到的数据存储在某个全局变量中的函数。现在我可以通过控制台记录它。请帮忙

编辑:尝试将检索到的数据存储到回调中的变量中

    function apiCall(url, protocol) {
    function externalApi(url, callback) {
var output = '';
        ..........
........
......
                    console.log("Header is " + JSON.stringify(headers));
                    output = callback(str, statusCode);
                });
            });

...................
....................
return output;
...............
...............
    var result = externalApi(url, status);
console.log("The result is " + result);
    }

但结果值为空。这是由于异步行为。如何解决这个问题。理想情况下,我希望函数 apiCall 返回结果。像下面的东西

var result = externalApi(url, status);
    return result;
        }

标签: javascriptnode.js

解决方案


推荐阅读