javascript - 从nodejs中的http请求获取值

标签 javascript node.js

var latLon = "40.8,-77.8"; //Lat/lon
var cityCode = ""; //City code
var cityName = "";
var latLongCityCodeURL = ("http://dataservice.accuweather.com/locations/v1/cities/geoposition/search?apikey=" + weatherKey + "&q=" + latLon);

//Current Conditions Vars
var ccWeatherText = ""; //Text for weather at location
var ccTemp = 0; //Degrees Farenheit
var ccIcon = 0; //weather icon number https://developer.accuweather.com/weather-icons
var ccURL = "test"; //URL for get
//12 hour forecast Conditions Vars


//5 day forecast conditions Vars

//Get city code
http.get(latLongCityCodeURL, (resp) => {
    var that = this;
    resp.on("data", (chunk) => {
        var result = JSON.parse(chunk);
        var cityCode = result.Key;
        var cityName = result.EnglishName;
        console.log(cityCode + " " + cityName);
        that.cityName = cityName;
        that.cityCode = cityCode;
    });

}).on("error", (err) => {
    console.log("Error: " + err.message);
});


console.log(cityCode + " " + cityName);

所以我的问题是,我正在使用 require('http') 发出 http 请求,我想要做的是解析数据并将其存储在我的全局变量中,以便我可以将它们用于其他请求。我尝试过使用 var that=this 并且尝试将全局变量分配给数据。我不知道该怎么做,我只是一直没有定义。我知道它与 ASYNC 有关,也与范围有关。请帮忙

最佳答案

您可以将结果保存到不同范围级别的变量中。请记住,Node.js 中的大多数 i/o 调用都是异步的。 这是一个例子:

var latLon = "40.8,-77.8"; //Lat/lon
var cityCode = ""; //City code
var cityName = "";
var latLongCityCodeURL = ("http://dataservice.accuweather.com/locations/v1/cities/geoposition/search?apikey=" + weatherKey + "&q=" + latLon);

//Current Conditions Vars
var ccWeatherText = ""; //Text for weather at location
var ccTemp = 0; //Degrees Farenheit
var ccIcon = 0; //weather icon number https://developer.accuweather.com/weather-icons
var ccURL = "test"; //URL for get


var savedResult = null;

//Get city code
http.get(latLongCityCodeURL, (resp) => {
    var jsonData = '';
    resp.on("data", (chunk) => {
        jsonData += chunk;
    });
    resp.on("end", () => {
        savedResult = JSON.parse(jsonData);
    });
}).on("error", (err) => {
    console.log("Error: " + err.message);
});


// Display saved result once available.
setTimeout(displaySavedResult, 2000);

function displaySavedResult() {
    if (!savedResult) {
        console.log('Last result is null!');
    } else {
        console.log('Last result: City Code: ' + savedResult.Key + " Name" + savedResult.EnglishName);
        console.log('Last result (all properties): ', JSON.stringify(savedResult, null, 2));
    }
}

关于javascript - 从nodejs中的http请求获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50363539/

相关文章:

javascript - 如何在按钮上添加 60 秒后自动点击功能并使用 JavaScript 执行该操作?

javascript - 如何使用jquery multifile选择多个文件

javascript - Node.js 是否是单线程的?

javascript - Socket.Io 如何从套接字实例(包括发送者)向房间中的所有成员发送信息

node.js - 如何在 Node.js 0.10 中立即使用读取流链接写入流?

javascript - jQuery load() 错误

javascript - 以编程方式将 Angular 模板编译为 HTML 字符串

javascript - Node.js 在 cmd 中运行,但不在浏览器中运行

javascript - Mongoose 对象 :javascript map function not working on adding new keys

javascript - 基于多个属性过滤对象数组