其实跨域问题一直都是我们前端同学比较头疼的东西,后端帮你解决还好,如果不帮你解决还得靠自己
同时跨域也是面试必问的问题。
相较于 jsonp 和cors跨域来说  webpack是比较新的解决跨域的方法
我也曾听过某个公司的技术经理说到 我们比较喜欢听到 面试者 说webpack 解决跨域 大概就是这个意思
所以说啊 技术这种东西 虽然最新的 公司不用 但还看得出来 你一直在跟进最新的技术 侧面反应 你比较好学 这个才是公司 想要的人才
今天 就来浅谈一下 webpack 代理解决跨域的问题
跨域 往往都是 客户端向服务器发送请求 导致的
那如果是 服务器向服务器发送请求呢 那就不存在跨域的问题了
我们webpack 本身有一个 插件 叫做 webpack-dev-server 是一个基于node.js的express 框架搭建的本地服务器
如果让我们本地服务器成为一个代理 向远程服务器发送请求 那么就能解决跨域的问题了
好了 废话不多说了 还是走入正题了 前提是webpack 安装了 webpack-dev-server
1.现在我们使用本地 创建俩个服务器 但是端口号不同 来实现跨域的模拟
在 webpack.config.js文件中配置 devServer
当运行 devServer的时候 webpack 运行在 3000端口

devServer:{   // 开发服务器配置port:3000,
}

同时我们也创建一个 express 的本地服务器
可以就在 webpack项目下创建一个server.js文件 因为 里面本来就有express 的框架 我们可以直接引入
运行的时候 直接 node server.js

let express=require('express');let app=new express();app.get('/user',(req,res)=>{res.json({name:'小王'});  // 向前台 返回一个json串
})app.listen(8080); // 在这里 我们监听8080 端口 形成跨域问题

然后在入口文件 src/index.js文件

let xhr=new XMLHttpRequest(); //创建ajax 对象
xhr.open('get','/user',true);xhr.onload=function(){console.log(xhr.response);
}
xhr.send(null);

如果我们不配置代理的话 运行项目之后 他会查找 3000/user 这个时候明显会报错
它会报 not found 没有找到 显然 因为我们是在8080/user 下创建的访问地址
这个时候需要我们配置代理了

devServer:{   // 开发服务器配置port:3000,open:true,// 每次运行程序 自动打开浏览器proxy:{   // 配置 代理'/api':'http://localhost:8080' //配置一个代理}}

当我们在访问地址的 /api/user 它会自动帮我们 加上 ‘http://localhost:8080/api/user ‘这个时候 前台的 入口js文件请求也要改变了

xhr.open('get','、/api/user',true);   /user前面 加上 /api  其他保持 不变

同时后台文件 也要改变了

app.get('/api/user',(req,res)=>{  // 请求地址上也要加上 /api/userres.json({name:'小王'});
})

这下才达到了 真正了跨域问题解决了 如果你的问题比较急于测试的话 那么上面就可以 但有个小问题了
不可能后台 都帮我们加上api 这下 后台接口上的配置 我们前台起的名字说了算 你觉得后台人员会听吗
人家 可能 后台人员不想加上 那个 /api 这个时候 就得靠我们自己来解决问题了 那么问题来了
能不能 每次请求帮我们把那个 /api 去掉呢 答案的肯定的了
这个时候 后台不需要再 加 /api 前台配置要改一改

proxy:{  // 以重写的方式  把请求代理到express服务器上'/api':{target:'http://localhost:8080',// 配置请求地址pathRewrite:{'/api':''}  //重写   发送的时候把 /api 去掉}
}

这样是不是好多了 前后端人员相视一笑 其实一个程序员 最不想去看别人的代码 和让别人来改自己的代码 当然 向人请教的除外哈
2. 当然 还有俩种跨域方式下面的仅仅作为了解哈
我们可以将 请求的 地址写在 webpack的配置文件中 既然 devServer 里面有express 我们服务器写到里面 不是省去了跨域的问题了 使两者在同一个接口下 当然这种情况仅仅限于 你要模拟数据测试测试 还可以撒
devServer 里面有一个 before的选项 让你可以用来 写个请求地址 模拟数据 也是达到了解决跨域的问题

devServer:{   // 开发服务器配置port:3000,open:true,before:function(app){app.get('/user',(req,res)=>{res.json({name:'小王'});})
}

前台请求地址直接写 /user 因为他们俩者本在就在同一个服务器下
3.服务器文件代码 和前台代码写在一起的方法 在运行服务器的时候连带运行 webpack项目
这个时候 需要安装一个webpack中间件

cnpm i webpack-dev-middleware --save
在server.js文件中

let webpack=require('webpack');
let config=require('./webpack.config.js');// 引入 webpack 配置文件
// 引入中间件     来运行 webpack
let middle=require('webpack-dev-middleware');
let compiler=webpack(config);
app.use(middle(compiler));
app.listen(3000)

在运行 server.js node server.js的时候 他还会运行 devServer
这种情况不过得保持 俩者的监听端口一致 在devServer 中也要监听 3000 端口
不过啊 现在很多项目都是前后端分离展开的 下面的情况 作为 简单了解就可以了
好了到此结束了 谢谢 觉得有用的点个小心心 ___

webpack配置代理跨域相关推荐

  1. Flask + Nginx + React + Webpack 配置解决跨域问题

    用 Flask 做后端开发单页应用,webpack-dev-server 生成静态文件在http://localhost:8080 下,Flask 页面在 http://localhost:5000 ...

  2. (十五)配置代理跨域

    1.解决Ajax请求跨域的两种方式 服务器之间传输数据不受同源策略的限制,Ajax是前端技术. (1)解决跨域问题的两种方式 jsonp   cors jsonp:利用<script>的s ...

  3. 通过 Nginx 代理转发配置实现跨域(API 代理转发)

    通过 Nginx 代理转发配置实现跨域(API 代理转发) 阅读 2285 收藏 119 2017-04-08 原文链接:www.thinktxt.com 1元视频体验视频通话10000分钟cloud ...

  4. vue跨域问题:proxy代理跨域

    前端跨域,本地跨域,vue项目跨域问题 疑问1: 前端开发中解决浏览器的跨域问题 (推荐阅读) 什么是跨域? 为什么要跨域? 解决"跨域"的五种常见方式: 1. JSONP 2. ...

  5. 关于vue-cli3中配置请求跨域的问题

    关于vue-cli3中配置请求跨域的问题 根据Vue CLI3官方文档, 需要在vue.config.js文件中配置devServer.proxy选项来解决跨域问题. 1.关于vue.config.j ...

  6. proxytable代理不生效_proxyTable代理跨域使用详解

    这次给大家带来proxyTable代理跨域使用详解,proxyTable代理跨域使用的注意事项有哪些,下面就是实战案例,一起来看一下. 什么是代理跨域 浏览器之间有同源策略,出于安全考虑不同域之间不允 ...

  7. 怎么实现跨域?配置vue跨域proxy,jsonp跨域很简单

    如果不设置跨域  需要跨域的接口是 https://sug.so.360.cn/suggest?word=a word 是参数 怎么设置跨域 1.vue的跨域第一步在 vue 的根目录创建一个  vu ...

  8. python flask跨域_Flask配置Cors跨域的实现

    1 跨域的理解 跨域是指:浏览器A从服务器B获取的静态资源,包括Html.Css.Js,然后在Js中通过Ajax访问C服务器的静态资源或请求.即:浏览器A从B服务器拿的资源,资源中想访问服务器C的资源 ...

  9. vue配置解决跨域问题

    我们在使用vue时,经常要遇到跨域的问题,其实这个问题很好解决,只需我们在vue-cli中配置一下即可. 实现跨越请求: 在config文件夹下找到index.js proxyTable: {&quo ...

最新文章

  1. 量子信息技术研究现状与未来
  2. 皮一皮:现在真是键盘侠的年代阿....
  3. 2015-2016 ACM-ICPC Northeastern European Regional Contest (NEERC 15)
  4. 【算法】红黑树-二叉树-算法
  5. 写一个类Army,代表一支军队,这个类有一个属性Weapon数组w(用来存储该军队所拥有的所有武器), 该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所能拥有
  6. Java中事件驱动程序设计_【JAVA语言程序设计基础篇】--事件驱动程序设计--鼠标事件...
  7. iPhone 12蓝色版疑似翻车:眼前的蓝不是蓝......
  8. C语言:求矩阵对角线元素的和
  9. 校准 Linux 服务器的时间
  10. SONY SVP1322 笔记本电脑升级
  11. win7我的计算机无法搜索,win7搜索功能无法正常使用的有效解决方法
  12. 价值博客们--by 刘末鹏
  13. T32 获取电脑Product ID
  14. 追问顶刊 | 独家专访《科学》最新研究:老年为何出现睡眠碎片化?
  15. 高通MSM8916后面的0VV 1VV 3VV 等代表什么?
  16. 图像修复论文阅读笔记-----Globally and Locally Consistent Image Completion
  17. Dockerfile构建Nginx镜像、镜像优化(多阶段构建,最小化镜像构建)
  18. java json 长度限制_tomcat解决POST请求过长的限制
  19. 「行业/市场分析」简说
  20. 硬件加油站 | 传感器 - PIR 人体红外传感器

热门文章

  1. 一文搞懂HMM(隐马尔可夫模型)
  2. 连续函数可视化——连续调制波形y=sin(t)sin(9t)
  3. php获取cookie过期时间,如何获取cookie的过期时间
  4. ios 地图大头针自定义显示图片 MKAnnotationView
  5. 无线网桥干货收藏 | 一文带你从初识到懂行
  6. Python print中文出现错误
  7. Eclipse插件开发之Wizard的学习与创建
  8. windows查看CPU核数、线程数
  9. 【Latex 写作】基础语法
  10. nmodbus C#modbus库