Webpack devServer中的 proxy 实现跨域的解决


Posted in Javascript onJune 15, 2018

Webpack dev server使用http-proxy解决跨域问题

文档资料

webpack关于webpack-dev-server开启proxy的官方介绍

Vue-cli proxyTable 解决开发环境的跨域问题——虽然这篇是写vue的,不过用在webpack-dev-server上也是一样的

http-proxy-middleware——webpack-dev-server的实现方法其实是对这个的封装

配置http-proxy

在webpack的配置文件(webpack.config.js)中进行配置

module.exports = {
 ...此处省略一万字

 // webpack-dev-server的配置
 devServer: {
 historyApiFallback: true,
 hot: true,
 inline: true,
 progress: true,
 port: 3000,
 host: '10.0.0.9',
 proxy: {
 '/test/*': {
 target: 'http://localhost',
 changeOrigin: true,
 secure: false
 }
 }
 },

 ...此处省略一万字
};

上述配置中,关于http-proxy的只是 proxy:

 {...} 中的值

调用接口

为了方便起见,下面使用jquery封装好的ajax函数进行示范

$.ajax({
 // url: 'http://10.0.0.9:3000/test/testFetch/Login.php', // 这样不行
 url: '/test/testFetch/Login.php', // 这样行
 type: 'post',
 data: {
 app_id: '13751313169',
 password: '123456',
 user_name: 'Nicholas'
 },
 success: function(data) {
 console.log(data);
 }
});

proxy中的部分参数说明
'/test/*' 以及 target:
 'http://localhost'

从名字就能看出,这个实际上是将匹配 '/test/*' 这种格式的API的域名重定向为 'http://localhost'

结合上面的 “调用接口” 可以看出, url:
 '/test/testFetch/Login.php' 这句,实际上会自动补充前缀,也就是说,url:
 '/test/testFetch/Login.php' 等价于 url: 'http://10.0.0.9:3000/test/testFetch/Login.php'

但是,我们使用了http-proxy进行重定向,这样的话,url:
 '/test/testFetch/Login.php' 等价于 url: 'http://localhost/test/testFetch/Login.php'

changeOrigin

  • true/false, Default: false - changes the origin of the host header to the target URL
  • 本地会虚拟一个服务端接收你的请求并代你发送该请求——这个是别人的说法
  • 我试了一下,就算这个参数设置成 false 也有部分情况是可以的,具体原因不详,所以还是将其设置成 true 吧

secure

  • true/false, if you want to verify the SSL Certs

pathRewrite

例子: pathRewrite:
 {'^/api': ''}

Object-keys will be used as RegExp to match paths

我猜,这里是将 '^/api' 使用 '' 代替(只是我猜,没是成功,估计是我的正则表达式写得不行)

附上使用Fetch API的代码

上述代码与 “调用接口” 中使用 $.ajax() 实现的效果是一样的

let testAsync = async function () {
 var feeling = {
 app_id: '13751313169',
 password: '123456',
 user_name: 'Nicholas'
 };

 var fetchParams = {
 method: 'post',
 headers: {
 'Accept': 'application/json',
 'Content-Type': 'application/json'
 },
 credentials: 'include', // 将凭证也带上(例如cookies)
 body: JSON.stringify(feeling),
 };

 let temp = await fetch('/test/testFetch/Login.php', fetchParams).then(response => response.text());
 console.log(temp); // 这个就是一个json对象
 return temp;
};

let data = testAsync(); // async函数返回值是一个Promise对象
console.log(data); // 这个是一个Promise对象

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

Javascript 相关文章推荐
jQuery EasyUI NumberBox(数字框)的用法
Jul 08 Javascript
合并table相同单元格的jquery插件分享(很精简)
Jun 20 Javascript
jquery实现的导航固定效果
Apr 28 Javascript
用js判断是否为360浏览器的实现代码
Jan 15 Javascript
浅谈几种常用的JS类定义方法
Jun 08 Javascript
JavaScript对象创建模式实例汇总
Oct 03 Javascript
js调用刷新界面的几种方式
May 03 Javascript
微信小程序 开发之全局配置
May 05 Javascript
React利用插件和不用插件实现双向绑定的方法详解
Jul 03 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
Sep 28 Javascript
AngularJS实现注册表单验证功能
Oct 16 Javascript
使用p5.js实现动态GIF图片临摹重现
Oct 23 Javascript
详解webpack的proxyTable无效的解决方案
Jun 15 #Javascript
vue中axios的封装问题(简易版拦截,get,post)
Jun 15 #Javascript
vue和webpack打包项目相对路径修改的方法
Jun 15 #Javascript
webpack公共组件引用路径简化小技巧
Jun 15 #Javascript
微信小程序自定义tab实现多层tab嵌套功能
Jun 15 #Javascript
微信小程序实现自定义modal弹窗封装的方法
Jun 15 #Javascript
详解vue组件开发脚手架
Jun 15 #Javascript
You might like
phpMyAdmin 安装教程全攻略
2007/03/19 PHP
PHP 操作文件的一些FAQ总结
2009/02/12 PHP
php在页面中调用fckeditor编辑器的方法
2011/06/10 PHP
php全局变量和类配合使用深刻理解
2013/06/05 PHP
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
asp.net和php的区别点总结
2019/10/10 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
js中的屏蔽的使用示例
2013/07/30 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
2016/09/05 Javascript
JavaScript中push(),join() 函数 实例详解
2016/09/06 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
详解vue父子组件关于模态框状态的绑定方案
2019/06/05 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
[01:36]极致酷炫!TI9典藏宝瓶+撼地者至宝展示
2019/06/11 DOTA
python 数据加密代码
2008/12/24 Python
Python 制作糗事百科爬虫实例
2016/09/22 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
python构建指数平滑预测模型示例
2019/11/21 Python
python程序如何进行保存
2020/07/03 Python
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
生产副总岗位职责
2013/11/28 职场文书
安全生产网格化管理实施方案
2014/03/01 职场文书
党风廉正建设个人工作总结
2015/03/06 职场文书
工作简报格式范文
2015/07/21 职场文书
一文搞清楚MySQL count(*)、count(1)、count(col)区别
2022/03/03 MySQL