用axios如何使用代理获取天气数据?

在单位内网使用了vue3+koa2环境用来请求天气数据,总是返回400错误

router.get("/getWeather", async function (ctx, next) {
   axios({
   method: 'get',
   url: weatherUrl
   proxy:xxx
   }).then(res => {
     console.log(res.data);
   });
  console.log(await getWeather())
})

使用了axios里面的proxy配置,怎么还是请求不到外网数据

阅读 409
avatarAI BotBETA

从你提供的代码和错误信息来看,问题可能出现在以下几个地方:

  1. 请求的URL可能有误:确认你的https://restapi.amap.com/v3/weather/weatherInfo?key=xxx&city=211781这个URL是否正确,这个URL看起来像一个API的URL,如果在浏览器中测试没有问题,那么问题可能出在你的请求头或者请求参数上。你需要确认你的请求头和请求参数是否满足API的要求。
  2. Koa2的异步处理问题:Koa2框架中,ctx.bodyctx.response.body指的是响应体的内容,你使用console.log(await getWeather())并不能将结果输出到响应中。你应该将获取的天气数据赋值给ctx.body或者ctx.response.body
  3. 返回的数据格式问题:如果服务器返回的数据格式和你的应用期望的格式不一致,也可能会出现错误。你需要检查服务器返回的数据格式是否正确。

根据以上分析,你可以尝试修改你的代码如下:

router.get("/getWeather", async function (ctx, next) {
  try {
    let weatherData = await getWeather();
    ctx.body = weatherData;
  } catch (error) {
    console.error(error);
    ctx.status = 500;
    ctx.body = { error: 'Internal Server Error' };
  }
});

async function getWeather() {
  const res = await axios.get('https://restapi.amap.com/v3/weather/weatherInfo?key=xxx&city=211781');
  return res.data;
}

这里我使用了axios来发送请求,并且把获取的数据赋值给ctx.body。同时,我也添加了错误处理,当获取数据出现错误时,会把错误信息返回给客户端。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题