vue 使用 axios 跨域处理
小学期在做一个音乐网 FreeMusic 需要很多跨域访问的 API ,所以随之而来就是如何解决跨域问题同时还支持本地 API ,网上方法很多不过大部分会遭受 CORB ,或者需要在服务器端设置跨域。
因为这个项目采用的是 vue 框架 + axios 进行 http 请求,所以结合 vue + axios 进行跨域处理,先说说在服务器端设置跨域处理:
1 | header(“Access-Control-Allow-Origin:*”); |
服务器端设置跨域主要在于对请求头进行访问控制即可,很显然对于我本次访问的 API 是酷狗音乐的,我们无法操作服务器端。
结合 vue 里面的配置文件可以自己设置一个代理服务器,使用 proxyTable 进行配置,同时还可以配置本地 API ,在 config/index.js 里面找到 proxyTable: {} , 然后在里面进行如下配置:
1 | proxyTable: { |
/kugouApi 可自定义命名,target 设置你将要调用的接口域名和端口号,changeOrigin 将主机头的原点更改为目标URL,所以要设为 true,pathRewrite 路径重写,即可直接使用 /kugouApi 代替 target 里面的接口。如果要设置多个代理,同理直接在后面继续添加,注意这里设置了多个代理,Axios.defaults.baseURL 就不能在设置了。
使用:http://m.kugou.com/?json=true => /kugouApi/?json=true
1 | this.axios.get('/kugouApi/?json=true').then(res=>{ |
还可以在 main.js 中将代理挂载到 vue 的原型上
Vue.prototype.host = '/api' 请求的时候只需要使用 this.host + “路由参数地址” 即可