vue使用代理解决请求跨域问题详解


Posted in Javascript onJuly 24, 2019

在日常开发中,我们前端必不可少的需要像后端请求数据。

但是一般前后端分离,所以域名、端口等肯定不尽相同,这样就不可避免的会遇到浏览器的同源策略限制。

在一般情况下,后端都会设置请求跨域允许的来源、方法等。

但是也保不准后端疏忽而忘记这个问题。

那为了不影响我们的开发,前端只能被动的去找后端解决跨域问题。

其实,我们前端也可以解决跨域问题,那就是使用代理。

举个例子:

我请求的地址是这个:http://192.168.12.36:9000/api/SourceManager

但是我本地的vue项目的端口号是8080,这里就涉及到了端口号不一致导致的同源策略问题(别想着改成同端口,会冲突)、

那么我发起请求就会跨域而被浏览器拦截,那么我们来看看解决办法:

在vue的config文件夹中有个index.js文件:

在proxyTable中配置代理(名字可以随便起,我用的是web)

proxyTable: {
  '/web': {
    //设置你调用的接口域名和端口号 别忘了加http
    target: 'http://192.168.12.36:9000/api/SourceManage',
    changeOrigin: true,
    pathRewrite: {
      '^/web': ''
      //这里理解成用‘/web'代替target里面的地址,后面组件中我们掉接口时直接用web代替 比如我要调用'http://192.168.12.36:9000/api/SourceManage/user/add',直接写‘/web/user/add'即可
    }
  }
}

因为我是把公共的请求地址抽离出来的,所以大家可以参考以下部分:

获取数据:http://192.168.12.36:9000/api/SourceManager/GetAll

增加数据:http://192.168.12.36:9000/api/SourceManager/AddSource

修改数据:http://192.168.12.36:9000/api/SourceManager/UpdateSource

删除数据:http://192.168.12.36:9000/api/SourceManager/DeleteSource

理论上代理中配置到端口号即可,但是我为了后期方便,把公共地址抽离出来,一直配置到公共的结束,所以代理中我配置的是http://192.168.12.36:9000/api/SourceManager

然后在config文件夹中的dev.env.js文件中配置生产环境(开发环境):

这边写自己的路径端口号以及前面配置的代理名:

module.exports = merge(prodEnv, {
  NODE_ENV: '"development"',
  API_ROOT: ' "http://localhost:8080/web" '
})

然后在config文件夹中的prod.env.js文件中配置产品环境(上线环境):

这边我暂时就不写了,大家上线打包的时候写成自己的实际请求地址即可。

module.exports = {
  NODE_ENV: '"production"',
  API_ROOT: ' "" '
}

然后在main.js里改为请求配置的地址:

// 引入axios
import axios from 'axios'
 
// 使用axios
Vue.prototype.axios = axios;
 
// 配置公共请求地址
Vue.prototype.baseURL = process.env.API_ROOT;

然后在每个页面请求即可,写法参考:

因为之前一直配置的是公共地址,所以这里只写后面变化的,前面的引用设置的路径即可。

this.axios({
  method: "get",
  url:`${this.baseURL}/GetAll`, 
})
.then((response)=> {
  console.log(response)
})
.catch((error)=> {
  console.log(error);
});

设置完代理别忘了重启服务器。

好了,以上就是vue中配置代理解决跨域的问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 快捷键设置实现代码
Mar 13 Javascript
让人印象深刻的10个jQuery手风琴效果应用
May 08 Javascript
在页面加载完成后通过jquery给多个span赋值
May 21 Javascript
推荐9款炫酷的基于jquery的页面特效
Dec 07 Javascript
jQuery中toggleClass()方法用法实例
Jan 05 Javascript
JS实现仿百度文库评分功能
Jan 12 Javascript
原生JS实现图片网格式渐显、渐隐效果
Jun 05 Javascript
element-ui表格合并span-method的实现方法
May 21 Javascript
uni-app 支持多端第三方地图定位的方法
Jan 03 Javascript
js 计数排序的实现示例(升级版)
Jan 12 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
Mar 06 Javascript
浅析TypeScript 命名空间
Mar 19 Javascript
Vue父组件如何获取子组件中的变量
Jul 24 #Javascript
mock.js模拟数据实现前后端分离
Jul 24 #Javascript
vue+mock.js实现前后端分离
Jul 24 #Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
Jul 24 #Javascript
Vue封装的组件全局注册并引用
Jul 24 #Javascript
vue子路由跳转实现tab选项卡
Jul 24 #Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
Jul 24 #Javascript
You might like
PHP中几个常用的魔术常量
2012/02/23 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
javascript圆盘抽奖程序实现原理和完整代码例子
2014/06/03 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
2017/01/04 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
基于JS实现简单滑块拼图游戏
2019/10/12 Javascript
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
分享一个常用的Python模拟登陆类
2015/03/29 Python
Python数据操作方法封装类实例
2017/06/23 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
python和c语言哪个更适合初学者
2020/06/22 Python
详解CSS3浏览器兼容
2016/12/14 HTML / CSS
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
动物学专业毕业生求职信
2013/10/11 职场文书
行政副总岗位职责
2014/02/23 职场文书
法律六进活动方案
2014/03/13 职场文书
健康状况证明模板
2014/10/23 职场文书
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL