axios解决跨域问题

在Vue3项目中,使用axios访问聚合数据的天气API时遇到跨域问题。为解决此问题,需在vue.config.js中配置devServer的proxy选项。设置target为API的URL,changeOrigin为true,secure为false,并使用pathRewrite将/myapi重写为空,确保URL正确拼接。配置完成后,通过/myapi加上原URL路径进行请求,避免了跨域错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vue3中使用axios访问聚合的天气API,出现跨域问题,需要在前端进行一些配置:

首先是修改vue.config.js:

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  devServer:{
    proxy:{
      '/myapi':{
         // 需要代理的后端接口
        target: 'http://apis.juhe.cn/',
        //开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求
        changeOrigin: true,
        //非HTTPS
        secure: false,
         
        // 替换target中的请求地址,也就是说/myapi=/target,
        //请求target这个地址的时候直接写成/api即可。
        pathRewrite:{'^/myapi': '' }
      }
    }
  }
})

这里有两个地方要注意:

1. proxy:{...}必须写在devServer对应的配置对象中。如果书写位置不对,编译时会报错:

ERR: Invalid options in vue.config.js: 'proxy' is not allowed

2. 注意替换的规则,是'/myapi' 替换了target,也就是http://apis.juhe.cn/,这样替换后URL是没有最后的/,如果在http://apis.juhe.cn/后面还有URL,要注意替换后访问路径的拼接。如果少了/,导致URL不正取,浏览器会报CORS policy错误!!

配置好之后,修改代码:

原始的聚合天气预报访问URL是

http://apis.juhe.cn/simpleWeather/query?city=%E5%8C%97%E4%BA%AC&key=15b386******0be2ce3"

现在 http://apis.juhe.cn/被替换为/myapi,所以新的访问路径是:

'/myapi' + '/simpleWeather/query?city=%E5%8C%97%E4%BA%AC&key=15b386******0be2ce3'

这样才是正确的URL。

let api = "/simpleWeather/query?city=%E5%8C%97%E4%BA%AC&key=15b386******0be2ce3";
this.axios.get("/myapi"+api).then((resp)=>{
    console.log(resp);
});

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值