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 相关文章推荐
才发现的超链接js导致网页中GIF动画停止的解决方法
Nov 02 Javascript
javascript 新浪背投广告实现代码
Jul 07 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
Jan 13 Javascript
Jquery时间验证和转换工具小例子
Jul 01 Javascript
纯js和css实现渐变色包括静态渐变和动态渐变
May 29 Javascript
解释&&和||在javascript中的另类用法
Jul 28 Javascript
浅谈js的html元素的父节点,子节点
Aug 06 Javascript
Angular和百度地图的结合实例代码
Oct 19 Javascript
javascript中Date对象的使用总结
Nov 21 Javascript
JS 调试中常见的报错问题解决方法
May 20 Javascript
vue组件初学_弹射小球(实例讲解)
Sep 06 Javascript
微信小程序如何调用新闻接口实现列表循环
Jul 02 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
人族 Terran 魔法与科技
2020/03/14 星际争霸
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
ASP中用Join和Array,可以加快字符连接速度的代码
2007/08/22 Javascript
javascript window对象属性整理
2009/10/24 Javascript
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
2010/01/15 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
JS文件上传神器bootstrap fileinput详解
2021/01/28 Javascript
基于bootstrap写的一点localStorage本地储存
2017/11/21 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
Python3多线程爬虫实例讲解代码
2018/01/05 Python
Python中property属性实例解析
2018/02/10 Python
python with (as)语句实例详解
2020/02/04 Python
Python内存映射文件读写方式
2020/04/24 Python
django 模版关闭转义方式
2020/05/14 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
美国第一香水网站:Perfume.com
2017/01/23 全球购物
Java提供了哪些企业应用编程接口
2015/02/13 面试题
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
学生自我鉴定
2013/12/18 职场文书
优秀大学生职业生涯规划书
2014/02/27 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
Python机器学习之基于Pytorch实现猫狗分类
2021/06/08 Python
详解MySQL中的pid与socket
2021/06/15 MySQL
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL