react网络请求(axios)以及跨域问题的解决:配置代理

一、前言

网络请求是通过互联网连接到远程服务器并获取数据的过程。它在现代计算机应用程序中扮演着至关重要的角色,
因为许多应用程序都需要从远程服务器获取数据或将数据发送到远程服务器。例如: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"

说明:

  1. 优点:配置简单,前端请求资源时可以不加任何前缀。
  2. 缺点:不能配置多个代理。
  3. 工作方式:上述方式配置代理,当请求了当前端口不存在的资源时,那么该请求会转发给5000 (优先匹配前端资源)

方法二(老版)

  1. 第一步:创建代理配置文件

    在src下创建配置文件:src/setupProxy.js
    
  2. 编写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': ''}
        })
      )
    }
    

说明:

  1. 优点:可以配置多个代理,可以灵活的控制请求是否走代理。
  2. 缺点:配置繁琐,前端请求资源时必须加前缀。

方法二(新版)

新版区别与老版在于,不能直接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);}
    )

个人博客:余生的学习笔记

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React 中使用 Axios 进行网络请求时,解决跨域问题可以通过以下方法: 1. 在后端服务器开启 CORS:在后端服务器的响应头中添加 CORS 相关的头信息,允许指定的域名进行跨域访问。可以在后端的响应中添加如下的头信息: ``` Access-Control-Allow-Origin: http://localhost:3000 // 允许访问的域名 Access-Control-Allow-Methods: GET, POST, PUT, DELETE // 允许的请求方法 Access-Control-Allow-Headers: Content-Type // 允许的请求头 ``` 请注意,在生产环境中,应该限制允许跨域访问的域名,避免安全风险。 2. 使用代理服务器:可以在开发环境中使用代理服务器来解决跨域问题。在 React配置文件(例如 `package.json` 或 `webpack.config.js`)中,将代理服务器的地址配置Axios 请求的基础路径。例如: ```javascript axios.defaults.baseURL = '/api'; // 代理服务器的地址 ``` 然后,在网络请求时,只需使用相对路径即可。 3. JSONP (仅适用于 GET 请求):如果后端支持 JSONP,可以使用 Axios 发送 JSONP 请求来避免跨域问题。通过将 `callback` 参数添加到请求 URL 中,使得响应返回一个函数调用。例如: ```javascript axios.get('http://api.example.com/data?callback=handleResponse') .then(response => { // 处理响应数据 }) .catch(error => { // 处理错误 }); ``` 在全局作用域下定义 `handleResponse` 函数,用于处理响应数据。 以上是一些常见的解决跨域问题的方法,你可以根据你的具体情况选择适合的方法。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值