我正在尝试加载天气数据。我有完整的前端代码,但我需要将其移至后端。我将我的函数库移到了Node.JS.我使用$ .getJSON但被告知我应该使用https.request来获得新版本。这是我的代码:
getTextWeatherUsingStationUsingRequest: function(theStation){
const http = require("http");
const https = require("https");
thePath = 'stations/' + theStation + '/observations/current';
// theURL = 'https://api.weather.gov/stations/' + theStation + '/observations/current';
function requestTheData(){
var options = {
protocol: "https:",
hostname: "https://api.weather.gov/",
path: thePath,
port: 80,
method: "GET"
};
var instaRequest = https.request(options);
instaRequest.on("response", function(res){
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
res.on('end', () => {
console.log('No more data in response.');
});
console.log("response");
console.log(res.statusCode);
console.log(res.statusMessage);
});
instaRequest.on('error', (e) => {
console.error(`problem with request: ${e.message}`);
});
instaRequest.end();
}
requestTheData();
我收到此错误,无法弄清楚发生了什么:
problem with request: getaddrinfo ENOTFOUND https://api.weather.gov/stations/ https://api.weather.gov/stations/:80
答案 0 :(得分:0)
HTTPS通常使用端口443,所以我们改变它。此外,API显示主机名应该是原始URL,路径应该是路径的其余部分(带有前导斜杠),类似于:
thePath = '/stations/' + theStation + '/observations/current';
...
var options = {
hostname: "api.weather.gov",
path: thePath,
port: 443,
method: "GET"
};
答案 1 :(得分:0)
在看到任何答案之前我得到了它的工作: 协议:“https:”, 主机名:“api.weather.gov”,
然后我得到一个状态: 403禁止您无权访问 “http://api.weather.gov/”在此服务器上。
我似乎记得你需要通过标题传递内容,所以我在“方法:”GET“,”
下添加了这个内容。 method: "GET",
headers: {
'Accept' : 'application/json',
'Content-Type': 'application/json',
'User-Agent' : 'MY-UA-STRING'
}
而且,瞧,现在我正在获取JSON天气数据。直到我添加'User-Agent'才行。你们知道这需要什么(和/或指向一个描述这个的地方)吗?