我目前正在开发天气应用程序,并使用Axios执行对第三方天气API的get请求。当我在Postman上执行API请求时,我能够检索所需的数据。然而,当我使用Axios执行此请求时,会收到一个400错误的请求错误。我查看了Axios文档,看看我的格式是否有问题,但我发现他们的文档和我的代码没有差异。我已经为此工作了几个小时了,我很困惑你们是否看到我的代码有什么问题,可能会导致这个错误。
这是我的代码
app.get("/weatherquery/:zip", (req, res) => {
axios({
url: "api.openweathermap.org/data/2.5/weather?zip=08060&appid=[CHANGE_FOR_YOUR_APPID]",
})
.then((result) => res.send(result))
.catch((error) => {
console.log(error);
res.send(error.message);
});
});
这就是的错误
400
{ connection: 'close' }
{
transitional: {
silentJSONParsing: true,
forcedJSONParsing: true,
clarifyTimeoutError: false
},
adapter: [Function: httpAdapter],
transformRequest: [ [Function: transformRequest] ],
transformResponse: [ [Function: transformResponse] ],
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
validateStatus: [Function: validateStatus],
headers: {
Accept: 'application/json, text/plain, */*',
'User-Agent': 'axios/0.23.0'
},
url: 'api.openweathermap.org/data/2.5/weather?zip=08060&appid=73faabe2b55b90dc0d0c89c4899b2a94',
method: 'get',
data: undefined
}
检查url:中的https://
var axios = require('axios');
var config = {
method: 'get',
url: 'https://api.openweathermap.org/data/2.5/weather?zip=08060&appid=[CHANGE_FOR_YOUR_APPID]',
headers: { }
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
每当API在Postman中工作,但在网页中不工作时,很可能是因为CORS问题。作为一种安全预防措施;"跨站点";正在发出请求。。。例如,从yourdomain.com到openweathermap.org的请求。
如果openweathermap.org以某种方式提供CORS支持(或JSONP和旧的解决方案),您仍然可以访问它;"代理";(即,您向同一域的服务器发出请求,服务器向weather API发出请求)。