webpack+vue-cil 中proxyTable配置接口地址代理操作


Posted in Javascript onJuly 18, 2020

在项目开发的时候,接口联调的时候一般都是同域名下,且不存在跨域的情况下进行接口联调,但是当我们现在使用vue-cli进行项目打包的时候,我们在本地启动服务器后,比如本地开发服务下是 http://localhost:8080 这样的访问页面,但是我们的接口地址是 http://xxxx.com/save/index 这样的接口地址,我们这样直接使用会存在跨域的请求,导致接口请求不成功,因此我们需要在打包的时候配置一下,我们进入 config/index.js 代码下如下配置即可:

dev: {

 // 静态资源文件夹
 assetsSubDirectory: 'static',

 // 发布路径
 assetsPublicPath: '/',

 // 代理配置表,在这里可以配置特定的请求代理到对应的API接口
 // 例如将'localhost:8080/api/xxx'代理到'www.example.com/api/xxx'
 // 使用方法:https://vuejs-templates.github.io/webpack/proxy.html
 proxyTable: {
  '/api': {
  target: 'http://xxxxxx.com', // 接口的域名
  // secure: false, // 如果是https接口,需要配置这个参数
  changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
  pathRewrite: {
   '^/api': ''
  }
  }
 },
 // 本地访问 http://localhost:8080
 host: 'localhost', // can be overwritten by process.env.HOST

接口地址原本是 /save/index,但是为了匹配代理地址,在前面加一个 /api, 因此接口地址需要写成这样的即可生效 /api/save/index。

注意: '/api' 为匹配项,target 为被请求的地址,因为在 ajax 的 url 中加了前缀 '/api',而原本的接口是没有这个前缀的,所以需要通过 pathRewrite 来重写地址,将前缀 '/api' 转为 '/'。如果本身的接口地址就有 '/api' 这种通用前缀,就可以把 pathRewrite 删掉。

补充知识:webpack -- 关于proxyTable的配置在开发环境和生产环境中的原理解析

前言

首先,proxyTable是我们在本地开发环境中调试接口用的,目的是为了解决本地跨域的问题,因为本地地址为localhost:xxxx/xxx

在线上的生产环境是没用的!!!

假设我们用的是vue-cli命令行工具生成的webpack项目模板,我们很容易能在config文件夹下面找到index.js文件。

本地如何配置

假设我要请求的地址为

'http://xxx.com/scada/json/aa.tpl'

我们在index.js文件中找到如下代码:我推荐了一种写法,后面我会说为什么

那么我请求的那段代码就是这样的

axios.get('/scada/json/aa.tpl').then((res) => {
 //........
})

稍微解释一下其中的原理:当发请求的时候,proxy就会起作用,他会在接口'/scada'前面加上 ‘http://xxx.com:123',成为 ‘http://xxx.com:123/scada/json/aa.tpl' 由于我们配置中的 pathRewrite字段需要将 '/scada'写为 ‘/scada',所以请求接口还是 ‘http://xxx.com:123/scada/json/aa.tpl'

继续向下看,干货还在后面

假设几种其它的写法

假设一

如果proxyTable配置是这样的

proxyTable: {
 '/scada': {
 target: 'http://xxx.com:123', 
 changeOrigin: true,
 pathRewrite: {
  '^/scada': '/'  
 }
 }

那么我们的请求代码必须写成这样

axios.get('/scada/scada/json/aa.tpl').then((res) => {
 //........
 //是不是有点难受
})

假设二

如果proxyTable配置是这样的,也就是重新起个名字

proxyTable: {
 '/api': {
 target: 'http://xxx.com:123', 
 changeOrigin: true,
 pathRewrite: {
  '^/api': '/'  
 }
 }

那么我们的请求代码必须写成这样

axios.get('/api/scada/json/aa.tpl').then((res) => {
 //........
 //这种写法还能接受,但是有个致命的缺点
})

再向下看,看看我推荐的写法的真真优势

打包上线的问题

这里只说代码上线之后和接口在同源情况下,如果不同源则存在跨域,这里先不考虑这种情况

假如我们把打包后的代码也部署到了 'http://xxx.com:123'上

上线后的代码为生产环境,没有了proxy

那么他是怎么解析请求的呢?比如下面这个请求

axios.get('/scada/json/aa.tpl').then((res) => { //........

})

由于 '/'表示的是根目录的意思,所以会解析为hostname + port + 请求的地址,即为 ‘http://xxx.com:123/scada/json/aa.tpl' ,没有一点问题,接口肯定能请求到

那么如果按照上面我说的假设一或者假设二的写法呢?

是不是会解析为 ‘http://xxx.com:123/scada/scada/json/aa.tpl' 和 ‘http://xxx.com:123/api/scada/scada/json/aa.tpl'

所以,假设一和假设二需要在打包之前修改请求地址才能打包,增加了许多不必要的麻烦

以上这篇webpack+vue-cil 中proxyTable配置接口地址代理操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
juqery 学习之三 选择器 简单 内容
Nov 25 Javascript
为原生js Array增加each方法
Apr 07 Javascript
JavaScript(js)设置默认输入焦点(focus)
Dec 28 Javascript
jQuery控制输入框只能输入数值的小例子
Mar 20 Javascript
jquery中object对象循环遍历的方法
Dec 18 Javascript
jQuery 3.0 的 setter和getter 模式详解
Jul 11 Javascript
三种方式实现瀑布流布局
Feb 10 Javascript
详解如何使用Vue2做服务端渲染
Mar 29 Javascript
jq checkbox 的全选并ajax传参的实例
Apr 01 Javascript
vue项目中使用vue-i18n报错的解决方法
Jan 13 Javascript
通过js实现压缩图片上传功能
Feb 25 Javascript
小程序自动化测试的示例代码
Aug 11 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
Jul 18 #Javascript
完美解决通过IP地址访问VUE项目的问题
Jul 18 #Javascript
Vue移动端项目实现使用手机预览调试操作
Jul 18 #Javascript
vue中移动端调取本地的复制的文本方式
Jul 18 #Javascript
vue中用 async/await 来处理异步操作
Jul 18 #Javascript
vue 使用async写数字动态加载效果案例
Jul 18 #Javascript
vue-router为激活的路由设置样式操作
Jul 18 #Javascript
You might like
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
PHP合并静态文件详解
2014/11/14 PHP
工作需要写的一个js拖拽组件
2011/07/28 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
javascript常用函数(2)
2015/11/05 Javascript
jQuery+ajax实现文章点赞功能的方法
2015/12/31 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
开发用到的js封装方法(20种)
2018/10/12 Javascript
浅谈VUE中演示v-for为什么要加key
2020/01/16 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
Python实现的爬虫功能代码
2017/06/24 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
pandas DataFrame数据转为list的方法
2018/04/11 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
浅谈python中真正关闭socket的方法
2018/12/18 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
维也纳通行证:Vienna PASS
2019/07/18 全球购物
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
新员工入职感言
2014/02/01 职场文书
推荐信格式要求
2014/05/09 职场文书
经典团队口号
2014/06/06 职场文书
个人对照检查材料思想汇报(四风问题)
2014/09/25 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
给领导敬酒词
2015/08/12 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
交通安全教育心得体会
2016/01/15 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技