vue-cli中axios设置了baseurl后如何进行跨域请求?

发布于 2022-09-07 12:08:13 字数 1259 浏览 31 评论 0

最近学习在vue-cli中用axios,打算用豆瓣的api,我设置了axios的baseurl为豆瓣的api后出现跨域问题

  // main.js
        axios.defaults.baseURL = 'http://api.douban.com/v2/';
        
        Vue.prototype.$axios = axios;,

然后我就去网上搜把config/index.js中修改

proxyTable: {
      '/api': {
        target: 'http://api.douban.com/v2', // 接口的域名
        // secure: false,  // 如果是https接口,需要配置这个参数
        changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
        pathRewrite: {
          '^/api': ''
        }

      }
    },
    

然后再组件中请求

    

this.$axios.get('api/movie/top250',{
            
        })
        .then(res=>{
            console.log(res);
            
            console.log('ok');
        })
        .catch(err=>{
            console.log(err);
        });
        
   

发现能请求到,但是会报问题和Error: Network Error,当然也不会log出ok,然后我把baseurl注释掉后就能正常的返回ok不报错了。后来我又把baseurl改成axios.defaults.baseURL = 'https://api.github.com/'
然后获取github的数据,没问题,但是之前的豆瓣的就又不行了,那么问题来了,在设置了baseurl(比如github)的时候我应该怎样进行跨域,请求时直接写豆瓣的地址是可以获取到,但是还是会报错图片描述图片描述
也就是某个请求如何不受baseurl的影响?求大神告知,谢谢。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

只是偏爱你 2022-09-14 12:08:13
  1. proxytable的配置保持不变
  2. 由于设置了axios.defaults.baseURL,跨域请求时候必须重写这个baseURL
// 获取当前服务器环境下的地址
let mes = window.location;
let _baseurl = `//${mes.hostname}:${mes.port}`;

this.$axios({
    baseURL: _baseurl,   //重写baseURL
    url: 'api/movie/top250', 
})
.then(function (response) {
   console.log(response);
  })
.catch(function (error) {
   console.log(error);
});

axios文档中有说明配置的优先原则


理由猜想(如果上面的方案已经解决了你的问题,下面的可以略过...)
为什么proxytable无效?
其实没有无效,只是他捕获的路径是以当前服务器环境为基础的,比如改vue项目运行在localhost:8000,则proxytable里面捕获的是 http://localhost:8000/api/movie/top250
基于以上,axios跨域失效就能解释了:因为全局设置了baseURL,你的axios请求基础路径就是baseURL,比如说上面那个项目,axios请求的路径会变成baseURL/api/movie/top250,所以proxytable就“失效”啦。
解决思路
就是发起axios请求时候重写baseURL,把他改成当前服务器环境下的地址,这样proxytable就能捕获到了

图片描述

世界和平 2022-09-14 12:08:13

这句干掉

axios.defaults.baseURL = 'http://api.douban.com/v2/';
浅沫记忆 2022-09-14 12:08:13

你好做出来了么,我也遇到同样的问题

套路撩心 2022-09-14 12:08:13

楼主你的问题解决了吗,我也碰到了同样的问题

为你鎻心 2022-09-14 12:08:13

proxyTable: {

  '/api': {
    target: 'http://api.douban.com/v2', // 接口的域名
    // secure: false,  // 如果是https接口,需要配置这个参数
    changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
    pathRewrite: {
      '^/api': ''
     }
    },   
    //这个foo可以解决
    '/foo':{
    target:'http://github.com'
    .....
    ....
    }
},

梦亿 2022-09-14 12:08:13

proxyTable配置不变
axios.defaults.baseURL = 'http://api.douban.com/v2/';
改成
axios.defaults.baseURL = '/api'

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文