详解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 相关文章推荐
Firefox下无法正常显示年份的解决方法
Sep 04 Javascript
javascript删除数组重复元素的方法汇总
Jun 24 Javascript
JavaScript判断变量是否为数组的方法(Array)
Feb 24 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
Jul 09 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
Aug 20 Javascript
Vue 过渡实现轮播图效果
Mar 27 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
Sep 07 Javascript
es6新特性之 class 基本用法解析
May 05 Javascript
Vue从TodoList中学父子组件通信
Feb 05 Javascript
ES6入门教程之变量的解构赋值详解
Apr 13 Javascript
微信小程序进入广告实现代码实例
Sep 19 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
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 使用redis简单示例分享
2015/03/05 PHP
php验证码生成器
2017/05/24 PHP
javascript 数组的方法集合
2008/06/05 Javascript
基于jQuery图片平滑连续滚动插件
2009/04/27 Javascript
web页面数据展示新想法(json)
2010/06/08 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
jQuery插件制作之参数用法实例分析
2015/06/01 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
jquery mobile开发常见问题分析
2016/01/21 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
JS常用知识点整理
2017/01/21 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
基于JavaScript实现验证码功能
2017/04/01 Javascript
基于EasyUI的基础之上实现树形功能菜单
2017/06/28 Javascript
Nodejs处理异常操作示例
2018/12/25 NodeJs
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
python3实现短网址和数字相互转换的方法
2015/04/28 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
一行Python代码过滤标点符号等特殊字符
2019/08/12 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
JS原生实现轮播图的几种方法
2021/03/23 Javascript
建筑系毕业生自我鉴定
2014/01/24 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
吨的认识教学反思
2014/04/27 职场文书
党支部班子“四风”问题自我剖析材料
2014/09/28 职场文书
科学育儿宣传标语
2014/10/08 职场文书
向女朋友道歉的话
2015/01/20 职场文书
幼儿园个人总结
2015/02/28 职场文书
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
LeetCode189轮转数组python示例
2022/08/05 Python