webpack配置proxyTable时pathRewrite无效的解决方法


Posted in Javascript onDecember 13, 2018

本人webpack版本3.6,webpack-dev-server版本2.9.1,本人按照网上写的版本折腾两天都没通,无意间自己试通了,猜测网上大部分都是照本宣科,没有自己实践

webpack配置接口地址代理

在项目开发中,接口联调的时候一般都是同域名下,且不存在跨域的情况下进行接口联调,但是当我们在本地启动服务器后,比如本地开发服务下是 http://localhost:8080 这样的访问链接,但是我们的接口地址是  http://www.xxx.com/save/post 这样的,我们这样直接使用就会存在跨域的请求,导致接口请求不成功。

配置:

我们打开下面路径的文件

config/index.js

在其中的 dev 对象里面找到: proxyTable: {}

这里就是配置代理的地方,我们进行如下设置:

module.exports = {
 // ...
 dev: {
  // 代理配置表,在这里可以配置特定的请求代理到对应的API接口
  proxyTable: {
   '/api': {
    target: 'http://www.xxx.com', // 你接口的域名
    secure: false,   // 如果是https接口,需要配置这个参数为true
    changeOrigin: true,   // 如果接口跨域,需要进行这个参数配置为true
  
   }
  },
 }
}

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

即:前端本地启动接口为:http://localhost:8080/api/save/post,转发的代理接口为:http://www.xxx.com/api/save/post,其中的/api为匹配项。

/api 是本地路径和后端接口路径的匹配前缀,若后端接口给了/api这个前缀,可用上面的写法。

若后端前缀不统一,则可继续添加,写法如下:

module.exports = {
 // ...
 dev: {
  // 代理配置表,在这里可以配置特定的请求代理到对应的API接口
  proxyTable: {
   '/api': {
    target: 'http://www.xxx.com', // 你接口的域名
    secure: false,   // 如果是https接口,需要配置这个参数为true
    changeOrigin: true,   // 如果接口跨域,需要进行这个参数配置为true
  
   },
   '/api': {
    target: 'http://www.xxx.com', // 你接口的域名
    secure: false,   // 如果是https接口,需要配置这个参数为true
    changeOrigin: true,   // 如果接口跨域,需要进行这个参数配置为true
  
   }
  },
 }
}

那么还有一种情况,是后端的接口没有我们想要的匹配项(前缀)'/api',是直接的http://www.xxx.com/save/post,这样的接口,我们就要用到pathRewrite来重写地址,将本地路径上的带匹配前缀的路径:http://localhost:8080/api/save/post上的前缀'/api'转成 ‘ / '。以下第一种是网络上大部分推荐的,但是我亲测是无效的,估计他们多数用的上面的方法,没有实际使用下面的方法,LZ用以下第一种方法折腾了2天无果,后去看了webpack-dev-server的issue,无意义试通了接口,即下面第二种方法,当然也不排除第一种方法是我的版本问题而没有效果,所以如果大家试了第一种方法有效就当我的方法没说,如果无效,不妨试试我的第二种方法:

第一种方法(网上写的方法)

module.exports = {
 // ...
 dev: {
  // 代理配置表,在这里可以配置特定的请求代理到对应的API接口
  proxyTable: {
   '/api': {
    target: 'http://www.xxx.com', // 你接口的域名
    secure: false,   // 如果是https接口,需要配置这个参数为true
    changeOrigin: true,   // 如果接口跨域,需要进行这个参数配置为true
    pathRewrite: {
     '^/api': '/'
    }
   }
  },
 }
}

第二种方法(亲测有效的方法)

module.exports = {
 // ...
 dev: {
  // 代理配置表,在这里可以配置特定的请求代理到对应的API接口
  proxyTable: {
   '/api/*':{
    target: "http://XXX.XXX.com",
    changeOrigin: true,
    pathRewrite: {'/api':'/'}
   }
  },
 }
}

即将上面的匹配项从 ‘/api' 改成了 '/api/*',至于为什么,我表示也没有搞明白,不过确实调通了代理,希望对大家有帮助

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

Javascript 相关文章推荐
js 数据类型转换总结笔记
Jan 17 Javascript
jQuery Ajax提交表单查询获得数据实例代码
Sep 19 Javascript
jquery将一个表单序列化为一个对象的方法
Jan 03 Javascript
jquery判断元素是否隐藏的多种方法
May 06 Javascript
JS实现数字格式千分位相互转换方法
Aug 01 Javascript
AngularJS 自定义指令详解及示例代码
Aug 17 Javascript
React-router中结合webpack实现按需加载实例
May 25 Javascript
Angularjs 手写日历的实现代码(不用插件)
Oct 18 Javascript
vue init webpack 建vue项目报错的解决方法
Sep 29 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
Dec 05 Javascript
JS实现提示效果弹出及延迟隐藏的功能
Aug 26 Javascript
JavaScript实现复选框全选功能
Apr 11 Javascript
node.js学习笔记之koa框架和简单爬虫练习
Dec 13 #Javascript
浅谈vuex actions和mutation的异曲同工
Dec 13 #Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
Dec 13 #Javascript
javascript对HTML字符转义与反转义
Dec 13 #Javascript
Web安全之XSS攻击与防御小结
Dec 13 #Javascript
JavaScript实现邮箱后缀提示功能的示例代码
Dec 13 #Javascript
深入理解js A*寻路算法原理与具体实现过程
Dec 13 #Javascript
You might like
php文件上传类的分享
2017/07/06 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
php实现微信支付之退款功能
2018/05/30 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
Javascript中Eval函数的使用说明
2008/10/11 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
BootStrap中
2016/12/10 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
限时抢购-倒计时的完整实例(分享)
2017/09/17 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
2019/08/15 Javascript
JavaScript实现省市区三级联动
2020/02/13 Javascript
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
2020/08/05 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
[04:23]DOTA2上海特锦赛小组赛第一日 TOP10精彩集锦
2016/02/27 DOTA
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
python数据处理实战(必看篇)
2017/06/11 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
黄色火烈鸟:De Gele Flamingo
2019/03/18 全球购物
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
C#中的验证控件有几种
2014/03/08 面试题
《故都的秋》教学反思
2014/04/15 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
营业用房租赁协议书
2014/11/26 职场文书
2015银行年终工作总结范文
2015/05/26 职场文书
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js