webpack跨域问题:解决webpack跨域的三种方式
标签: 其他
解决webpack跨域的三种方式
1.使用代理
2.模拟数据
3.前端启动到服务端上
webpack跨域问题
演示文件目录展示:
创建server.js文件来开启服务,模拟数据请求
// server.js
let express = require('express');
let app = express();
app.get('/api/user',(req,res)=>{
res.json({name:'小白'})
})
app.listen(3000)
在src->index.js文件中发送请求:
// index.js
let xhr = new XMLHttpRequest();
xhr.open('GET','/api/user',true);
xhr.onload = function() {
console.log(xhr.response)
}
xhr.send()
这个时候,当我们npm run dev后,访问http://localhost:8080/,出现错误:
我们应该请求的是http://localhost:3000/api/user,而不是http://localhost:8080/api/user;这里产生了跨域问题;
那么,如何配置webpack来解决呢?
配置:
在webpack.config.js中配置:
devServer:{
proxy:{
'/api':'http://localhost:3000' // 配置了一个代理: 如何访问的是/api开头,就去http://localhost:3000这里找
}
},
这样子就可以成功请求到http://localhost:3000/api/user的数据:
这里有一个问题,不一定所有的接口都是以/api开头的,按照上面的配置写法,如果有其他开头的接口请求,那我们还需要在下面配置不同开头对应的代理地址;
这里,我们可以这样配置:
// server.js
let express = require('express');
let app = express();
app.get('/user',(req,res)=>{
res.json({name:'小白2'})
})
app.listen(3000)
// index.js
let xhr = new XMLHttpRequest();
xhr.open('GET','/api/user',true);
xhr.onload = function() {
console.log(xhr.response)
}
xhr.send()
webpack.config.js中配置:
devServer:{
proxy:{ // 重写的方式,把请求代理到express服务器上
'/api':{
target:'http://localhost:3000',
pathRewrite:{'/api':''} // 把/api 替换为空
}
}
},
如上配置,就可以将前端以/api开头的请求代理到指定的服务端地址http://localhost:3000,并且会把请求地址的/api去除;
如果想直接在webpack里模拟数据可以这样配置:
devServer:{
// 模拟数据
before(app){
app.get('/user',(req,res)=>{
res.json({name:'小白'})
})
}
},
// index.js
let xhr = new XMLHttpRequest();
xhr.open('GET','/user',true);
xhr.onload = function() {
console.log(xhr.response)
}
xhr.send()
如果自己有服务端,不用代理来处理;
就可以在服务端中启动webpack,端口用服务端端口
需要安装webpack-dev-middleware:它可以让我们在服务端启动webpack
npm i webpack-dev-middleware -D
代码:
// server.js
let express = require('express');
let app = express();
let webpack = require('webpack');
let middle = require('webpack-dev-middleware');
let config = require('./webpack.config.js');
let compiler = webpack(config);
app.use(middle(compiler))
app.get('/user',(req,res)=>{
res.json({name:'小白2'})
})
app.listen(3001)
// index.js
let xhr = new XMLHttpRequest();
xhr.open('GET','/user',true);
xhr.onload = function() {
console.log(xhr.response)
}
xhr.send()
运行效果:
总结:解决webpack跨域的三种方式
1. 使用代理:服务端是别人的,使用这个方式
devServer:{
proxy:{ // 重写的方式,把请求代理到express服务器上
'/api':{
target:'http://localhost:3000',
pathRewrite:{'/api':''} // 把/api 替换为空
}
}
},
2. 前端模拟数据
devServer:{
// 模拟数据
before(app){
app.get('/user',(req,res)=>{
res.json({name:'小白'})
})
}
},
3. 服务端是自己写的,就可以把前端代码启动到服务端上
// server.js
let express = require('express');
let app = express();
let webpack = require('webpack');
let middle = require('webpack-dev-middleware'); // 引入这个
let config = require('./webpack.config.js'); // 配置文件
let compiler = webpack(config);
app.use(middle(compiler))
app.get('/user',(req,res)=>{
res.json({name:'小白2'})
})
app.listen(3001)

智能推荐
解决跨域的三种方法
解决跨域的三种方法 一.为什么会产生跨域问题? 出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)。 当一个请求的url的协议、域名、端口三者只要有一个与当前页面的u...
IDEA下Spring项目报错-could not autowire. no beans of“” type found
把一个eclipse的项目导入到IDEA,发现项目打开就报错:-could not autowire. no beans of“” type found。 在eclipse下面没有问题 项目编译和运行没有问题。 原因 网上搜索了一下原因。 spring auto scan配置,在编辑情况下,无法找不到对应的bean,于是提示找不到对应bean的错误。常见于mybatis的m...
!HTML制作APP注册页面,利用form等标签,达到想要的结果,以帮助自己了解html的排版和页面的问题,我们的css中的代码。对于页面有着至关重要的效果,如果出现问题,就要更加小心,其中的问题,
首先建立一个基本框架,已搭建根本的服务 然后我们深刻体会其中的知识点。 在我们建立表单的时候,一定要注意的是,对于一些选项,只能选择一个,不然就会出像笑话了。 比如:性别,等,一个不可以出现两种性别,特殊不在讨论范围,大众的来说,不可以出现这样的错误。 以下是css3 的代码。我们是要把其中的代码代表意思搞懂,不如也是一个。“码农” 效果如下: 今天的文章就到这里,有更好的...
iOS 从app中分享出小程序
1、小程序缩略图的图片比例是:5:4,图片在分享过程中会被微信进行二次压缩,如果出现图片模糊的情况,可以修改成一张稍微高质量的图片,但是大小要小于128K 2、需要小程序的原始ID: gh_xxxxxxxx 一定是gh开头的 3、需要path:pack-xxxx/xxxxx/xxxxxx 类似这种 4、使用微信分享方法,我这里用的是原生微信分享,没有使用第三方 ...
猜你喜欢
grbl脱机控制器
grbl脱机控制器 1年前因为研究自动写字机,所以渐渐萌生出做一台cnc控制器的想法,因为原来自己也研究过自动化控制,所以对于步进电机的控制还算熟悉,但由于精力的原因没有整出一个完整的控制框架,今年正好疫情严重导致自己也没啥事,所以花点时间做了一整套的东西。 然后还要说明的是,标题虽然是是grbl的脱机控制器,但实际和grbl一点关系都没有,做个标题党,吸引下点击率,这套控制系统从头到尾都是自己一...
leetcode24:两两交换链表中的节点(java实现)
需求 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 分析 奇数&偶数:链表整体长度为偶数时可以两两进行,奇数时最后一个数位置不变 具体实现:链表反转位置,并且其前...
pycharm+pyqt5+QtDesigner+pyUIC第一个pyqt5程序
安装pyqt5和pyqt5-tools 在tools中添加QtDesigner和PyUIC QtDesigner在"./Lib/site-packages/pyqt5_tools/Qt/bin"下,具体视python安装目录而定。PyUIC目录为"./Scripts/pyuic5.exe"。 在pycharm中,File->Settings->T...
如何编写智能合约(Smart Contract)?(III)建立标准代币部落币「BLC」
在上一篇中,我们我们如何编写智能合约?(II) 建立简易的加密代币,但是它存在很多安全问题,在本章中,我们将一步步带领大家创建一个能够放到以太币钱包的加密代币。 创建项目 有别于之前使用truffle init指令来初始化项目,在Truffle推出Boxes功能之后,我们可以直接套用称作react-box的样板,此样板已经整合create-react-app,可以直接用它来开发react web,...
Ionic3 自定义组件实现图片懒加载效果
在使用ionic3的过程中,我们可以使用angularjs的组件特性进行组件的自定义开发,对一些特定条件下的需求开发对应的组件。 下面我们就通过自定义组件来实现图片的懒加载效果。当我们需要加载的图片很大,但是我们又不愿意做压缩让图片失真,所以我们需要使用图片的懒加载效果。 实现流程 首先新建一个img-lazy-load组件: 会在src目录下生成一个components文件夹,里面包含img-l...
