一、前言
网络请求是通过互联网连接到远程服务器并获取数据的过程。它在现代计算机应用程序中扮演着至关重要的角色,
因为许多应用程序都需要从远程服务器获取数据或将数据发送到远程服务器。例如:Web应用程序需要通过网络请
求从服务器获取网页内容、图像和其他媒体文件。移动应用程序也需要通过网络请求获取更新的信息和其他数据,
以便向用户提供最新的内容和功能。因此,网络请求对于现代计算机应用程序的正常运行至关重要。
但是react并没有给我们封装发送请求的库,因为市面上已经有很多优秀的发送请求的库了,比如:JavaScript 中的 fetch、axios 或者其他库来进行网络请求。react避免重复造轮子。
二、axios的使用
1.1、axios介绍:
(1) 封装XmlHttpRequest对象的ajax
(2) promise风格
(3) 可以用在浏览器端和node服务器端
(4)轻量级
1.2、相关api
以下是Axios的一些常用API:
axios(config): 发送HTTP请求并返回Promise对象。
axios.get(url[, config]): 发送GET请求并返回Promise对象。
axios.post(url[, data[, config]]): 发送POST请求并返回Promise对象。
axios.put(url[, data[, config]]): 发送PUT请求并返回Promise对象。
axios.delete(url[, config]): 发送DELETE请求并返回Promise对象。
axios.create([config]): 创建一个新的axios实例。
axios.interceptors.request.use(function(config) {…}): 添加一个拦截器,处理请求发送前的操作。
axios.interceptors.response.use(function(response) {…}): 添加一个拦截器,处理响应到达后的操作。
axios.CancelToken: 取消请求的令牌。
axios.all(iterable): 并行发送多个请求,并返回Promise对象。
1.3、导入库
react脚手架开发中导入axios库,在项目目录运行以下命令
npm i axios
axios的更多内容
axios的github地址
三、解决跨域问题
方法一
在package.json中追加如下配置
"proxy":"http://localhost:5000"
说明:
- 优点:配置简单,前端请求资源时可以不加任何前缀。
- 缺点:不能配置多个代理。
- 工作方式:上述方式配置代理,当请求了当前端口不存在的资源时,那么该请求会转发给5000 (优先匹配前端资源)
方法二(老版)
-
第一步:创建代理配置文件
在src下创建配置文件:src/setupProxy.js
-
编写setupProxy.js配置具体代理规则:
const proxy = require('http-proxy-middleware') module.exports = function(app) { app.use( proxy('/api1', { //api1是需要转发的请求(所有带有/api1前缀的请求都会转发给5000) target: 'http://localhost:5000', //配置转发目标地址(能返回数据的服务器地址) changeOrigin: true, //控制服务器接收到的请求头中host字段的值 /* changeOrigin设置为true时,服务器收到的请求头中的host为:localhost:5000 changeOrigin设置为false时,服务器收到的请求头中的host为:localhost:3000 changeOrigin默认值为false,但我们一般将changeOrigin值设为true */ pathRewrite: {'^/api1': ''} //去除请求前缀,保证交给后台服务器的是正常请求地址(必须配置) }), proxy('/api2', { target: 'http://localhost:5001', changeOrigin: true, pathRewrite: {'^/api2': ''} }) ) }
说明:
- 优点:可以配置多个代理,可以灵活的控制请求是否走代理。
- 缺点:配置繁琐,前端请求资源时必须加前缀。
方法二(新版)
新版区别与老版在于,不能直接proxy()
而是要: proxy.createProxyMiddleware()
如:
proxy.createProxyMiddleware('/api1',{
target:'http://localhost:5000',
changeOrigin:true, //控制服务器收到的请求头中Host的值
pathRewrite:{'^/api1':''} //重写请求路径(必须重写)
})
注意:配置代理后发送请求时还是发送到原端口,如我配置了上述代理后发送请求,还是发送到3000,由代理转发到5000:
axios.get('http://localhost:3000/api1/students').then(
response => {console.log('请求成功',response.data);},
error => {console.log('请求失败',error);}
)
个人博客:余生的学习笔记