React 脚手架配置代理_方法

简介: React 脚手架配置代理_方法

写在前面

在最近看了React之后,一直觉得学的懵懵然,虽然很多大佬的手写笔记,写的都很不错,但是我一直没有我想要的那种细无巨细,比如类式组件this指向问题的追根溯源,又比如三大实例属性简写的由来,总之我还是决定做一份事无巨细的笔记。

那就让我们开始吧!


脚手架配置代理_方法1、2

前置说明

1. React本身只关注于界面, 并不包含发送ajax请求的代码

2. 前端应用需要通过ajax请求与后台进行交互(json数据)

3. react应用中需要集成第三方ajax库(或自己封装)


常用的ajax请求库

1. jQuery: 比较重, 如果需要另外引入不建议使用

2. axios: 轻量级, 建议使用

1) 封装XmlHttpRequest对象的ajax
2)  promise风格
3) 可以用在浏览器端和node服务器端
复制代码


安装axios

yarn add axios
复制代码


开启服务器

node server1.js
复制代码


浏览器测试地址

-在浏览器地址栏输入地址敲回车 == 发送get请求


FeHelper插件

  • 自动整理json文件


解决跨域

  • 请求跨域

微信截图_20221112130446.png


  • 发送了请求,数据无法返回。

微信截图_20221112130508.png


  • 代理服务器

中间微小服务器没有AJAX引擎。不会拦截返回数据。同源策略不会限制。

微信截图_20221112130515.png


  • 开启代理服务器

方法1

  • 配置文件
  • 在package.json中配置
"proxy":"http://localhost:5000" // 只需要写服务器地址端口号
复制代码


这样所以发送给3000的请求都会发送给5000

注意:

①必须重新启动项目
②get请求将端口号更换为3000
复制代码


getStudentData = ()=>{
        axios.get('http://localhost:3000/students').then(
                response => {console.log('成功了',response.data);},
                error => {console.log('失败了',error);}
        )
}
复制代码


  • public文件夹就是中间服务器的根路径,请求的数据如果是根路径有的数据那么就不会转发给端口号是5000的服务器。
getStudentData = ()=>{
        axios.get('http://localhost:3000/index').then(
                response => {console.log('成功了',response.data);},
                error => {console.log('失败了',error);}
        )
}
复制代码


微信截图_20221112130544.png


方法2

解决问题:如何配置多个服务器

  • 建立setupProxy.js文件

1.不可以使用ES6书写、必须使用CJS书写。

React脚手架会找到这个文件,把这个文件添加到webpack的配置。
复制代码


①引入内置模块

const proxy = require('http-proxy-middleware') // 不用下载这个库,react脚手架初始化已经下载好了
复制代码


② 暴露配置对象(函数)

函数收到一个服务对象,调用服务对象的use方法。将proxy方法作为use方法的参数。

③ proxy的参数

第一个参数:决定要把哪些的前缀传递给对应的服务器端口号。(带有这个前缀的路径就会触发代理,请求会被转发)

第二个参数:是一个对象

  • 内部target属性的值就是要转发的端口号,
  • changeOrigin属性是控制服务器收到的请求头中Host的值

可以更换请求来自于什么的服务器(返回数据的服务器会认为请求就是自身服务器发送的)


这里是3000请求5000

① 未使用changeOrigin:true

微信截图_20221112130606.png


②使用changeOrigin:true

微信截图_20221112130616.png


  • pathRewrite:{'^/api1':''} 是重写请求路径(必须)

详细分解:

将api1替换为空,因为正常发送请求时路径不会出现api1,但是不添加api1又无法请求转发给5000,添加了api又会导致路径不对。所以得使用该替换。

微信截图_20221112130625.png


const proxy = require('http-proxy-middleware')
module.exports = function(app){
  app.use(
    proxy('/api1',{ //遇见/api1前缀的请求,就会触发该代理配置
      target:'http://localhost:5000', //请求转发给谁
      changeOrigin:true,//控制服务器收到的请求头中Host的值
      pathRewrite:{'^/api1':''} //重写请求路径(必须)
    }),
    proxy('/api2',{
      target:'http://localhost:5001',
      changeOrigin:true,
      pathRewrite:{'^/api2':''}
    }),
  )
}
复制代码


getStudentData = ()=>{
        axios.get('http://localhost:3000/api1/students').then(
                response => {console.log('成功了',response.data);},
                error => {console.log('失败了',error);}
        )
}
复制代码


课程中对react脚手架配置代理总结

方法一

在package.json中追加如下配置

"proxy":"http://localhost:5000"
复制代码


说明:

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


方法二

  1. 第一步:创建代理配置文件
在src下创建配置文件:src/setupProxy.js
复制代码


  1. 编写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. 缺点:配置繁琐,前端请求资源时必须加前缀。



目录
相关文章
|
2月前
|
前端开发
React | 修改React脚手架的默认端口号?
React | 修改React脚手架的默认端口号?
146 64
|
1月前
|
XML 前端开发 JavaScript
react学习笔记一:入门级小白到脚手架(create-react-app)开发项目
这篇文章是React的学习笔记,覆盖了从React的基础用法到高级特性,包括组件化、状态管理、生命周期、虚拟DOM等主题,适合React初学者参考。
96 0
react学习笔记一:入门级小白到脚手架(create-react-app)开发项目
|
24天前
|
前端开发 JavaScript
手敲Webpack 5:React + TypeScript项目脚手架搭建实践
手敲Webpack 5:React + TypeScript项目脚手架搭建实践
|
1月前
|
前端开发
|
1月前
|
Android开发
jmessage-react-plugin的正确引入方法
jmessage-react-plugin的正确引入方法
13 1
|
2月前
|
前端开发 NoSQL MongoDB
React技术栈-基于react脚手架编写评论管理案例
这篇文章介绍了在MongoDB中使用sort和投影来对查询结果进行排序和限制返回的字段,通过具体的命令示例展示了如何实现这些操作。
51 6
React技术栈-基于react脚手架编写评论管理案例
|
2月前
|
前端开发
react配置proxy代理的两种方式
本文介绍了在React项目中配置代理的两种方式:通过在package.json中添加代理配置,以及通过创建setupProxy.js文件来实现更复杂的代理规则。
113 2
|
2月前
|
前端开发 JavaScript 开发者
请详细介绍React挂载阶段的方法。
请详细介绍React挂载阶段的方法。
53 9
|
2月前
|
前端开发 JavaScript
React技术栈-react的脚手架创建应用案例
本文介绍了如何使用React的官方脚手架工具create-react-app快速创建React项目,并展示了项目的目录结构和基本的代码文件,以及如何启动和运行React应用。
33 2
|
3月前
|
前端开发 JavaScript
React 组件生命周期方法详解
【8月更文挑战第30天】
48 5