vue --解决跨域问题
一、什么是跨域?
跨域问题一般是因为浏览器的同源策略问题。同源是指,协议+域名+端口 三者相同,既为同源。
同源策略限制以下几种行为
- Cookie、LocalStorage 和 IndexDB 无法读取
- DOM和JS对象无法获取
- AJAX请求无法发送
二、跨域解决方案。
- 使用jsonp实现,网页通过script标签向服务器请求json数据,服务器受到请求后,将数据放在一个指定名字的回调函数的参数里面传给前端。
<script src="http://www.test.com/getData?callback=getData"></script>
// 向服务器test.com发出请求,该请求的查询字符串有一个callback参数,用来指定回调函数的名字
// 处理服务器返回回调函数的数据
<script type="text/javascript">
// 服务器返回的数据会放到回调函数里面
function getData(res){
// 处理获得的数据
console.log(res.data)
}
</script>
- 在vue中实现跨域:在vue项目根目录下找到vue.config.js文件,没有的话创建一个就可以。
module.exports = {
devServer: {
open: true,
port: '9595',
proxy: { //配置跨域
'/api': {
target: 'https://xxxxxxxx', //这里后台的地址模拟的;应该填写你们真实的后台接口
changOrigin: true, //允许跨域
pathRewrite: {
/* 重写路径,当我们在浏览器中看到请求的地址为:http://localhost:8080/api/core/getData/userInfo 时
实际上访问的地址是:http://121.121.67.254:8185/core/getData/userInfo,因为重写了 /api
*/
'^/api': ''
}
},
}
},
}
- 在configs.js文件中,添加下面判断开发环境还是生产环境。更改baseUrl
const noAuthAxios = axios.create()
const authedAxios = axios.create()
const isPro = Object.is(process.env.NODE_ENV,'production') //判断是否是生产环境
// authedAxios.defaults.baseURL = process.env.VUE_APP_BASE_URL
authedAxios.defaults.baseURL = isPro? process.env.VUE_APP_BASE_URL:'/api' //如果是生产环境,则使用接口地址,否则使用代理地址
- 完美解决
现在看到发送的请求都是 :http://localhost:9595/api/xxxxx,