繁体   English   中英

axios 获取第三方api的请求格式

[英]Axios get request format for third party api

我目前正在开发一个天气应用程序,并且正在使用 Axios 执行对第三方天气 API 的获取请求。 当我在 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
}

检查网址中的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 和较旧的解决方案),您仍然可以访问它。 否则,您将需要某种可以充当“代理”的服务器(即,您在同一个域中向您的服务器发出请求,然后它向天气 API 发出请求)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM