vue-cli中axios设置了baseurl后如何进行跨域请求?
最近学习在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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
proxytable
的配置保持不变axios.defaults.baseURL
,跨域请求时候必须重写这个baseURL
理由猜想(如果上面的方案已经解决了你的问题,下面的可以略过...)
为什么proxytable无效?
其实没有无效,只是他捕获的路径是以当前服务器环境为基础的,比如改vue项目运行在localhost:8000,则
proxytable
里面捕获的是http://localhost:8000/api/movie/top250
基于以上,axios跨域失效就能解释了:因为全局设置了
baseURL
,你的axios请求基础路径就是baseURL
,比如说上面那个项目,axios请求的路径会变成baseURL/api/movie/top250
,所以proxytable
就“失效”啦。解决思路
就是发起axios请求时候重写
baseURL
,把他改成当前服务器环境下的地址,这样proxytable
就能捕获到了这句干掉
你好做出来了么,我也遇到同样的问题
楼主你的问题解决了吗,我也碰到了同样的问题
proxyTable: {
proxyTable配置不变
axios.defaults.baseURL = 'http://api.douban.com/v2/';
改成
axios.defaults.baseURL = '/api'