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


Posted in Javascript onJanuary 13, 2018

文档资料

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'

  1. 结合上面的 “调用接口” 可以看出, url: '/test/testFetch/Login.php' 这句,实际上会自动补充前缀,也就是说,url: '/test/testFetch/Login.php' 等价于 url: 'http://10.0.0.9:3000/test/testFetch/Login.php'
  2. 但是,我们使用了http-proxy进行重定向,这样的话,url: '/test/testFetch/Login.php' 等价于 url: 'http://localhost/test/testFetch/Login.php'

changeOrigin

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

secure

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

pathRewrite

  1. 例子: pathRewrite: {'^/api': ''}
  2. Object-keys will be used as RegExp to match paths
  3. 我猜,这里是将 '^/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 相关文章推荐
JScript中的"this"关键字使用方式补充材料
Mar 08 Javascript
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
Apr 07 Javascript
DOM 脚本编程中的兄弟节点
Oct 31 Javascript
js精度溢出解决方案
Dec 02 Javascript
js转化毫秒为时间格式代码
Apr 10 Javascript
JS组件Bootstrap实现下拉菜单效果代码
Apr 26 Javascript
jquery插件autocomplete用法示例
Jul 01 Javascript
jQuery仿京东商城楼梯式导航定位菜单
Jul 25 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
Sep 17 Javascript
vuejs响应用户事件(如点击事件)
Mar 14 Javascript
详解vue-cli之webpack3构建全面提速优化
Dec 25 Javascript
Vue组件通信中非父子组件传值知识点总结
Dec 05 Javascript
vuejs实现递归树型菜单组件
Jan 13 #Javascript
在vue中通过axios异步使用echarts的方法
Jan 13 #Javascript
详解基于vue-cli配置移动端自适应
Jan 13 #Javascript
javascript用rem来做响应式开发
Jan 13 #Javascript
深入理解ES6之数据解构的用法
Jan 13 #Javascript
详解ES6语法之可迭代协议和迭代器协议
Jan 13 #Javascript
详解如何在React组件“外”使用父组件的Props
Jan 12 #Javascript
You might like
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
2012/10/11 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
js中的for如何实现foreach中的遍历
2014/05/31 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
详解Axios统一错误处理与后置
2018/09/26 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
python实现k-means聚类算法
2018/02/23 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
Python 从相对路径下import的方法
2018/12/04 Python
Python实现word2Vec model过程解析
2019/12/16 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
Python数据可视化实现多种图例代码详解
2020/07/14 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
翻译学院毕业生自荐书
2014/02/02 职场文书
租赁协议书范本
2014/04/22 职场文书
工作保证书范文
2014/04/29 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
2015年党员承诺书
2015/01/21 职场文书
北京天坛导游词
2015/02/12 职场文书
大学生求职简历自我评价
2015/03/02 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
赤壁观后感(2)
2015/06/15 职场文书
党风廉政承诺书2016
2016/03/25 职场文书
详解Python中下划线的5种含义
2021/07/15 Python
pytorch中的 .view()函数的用法介绍
2022/03/17 Python