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月前
create-react-app配置环境变量
create-react-app配置环境变量
75 0
|
10天前
|
前端开发 数据可视化 API
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏(二)
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏
17 0
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏(二)
|
10天前
|
前端开发 JavaScript CDN
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏(一)
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏
22 0
|
27天前
|
前端开发 JavaScript
React生命周期方法在实际开发中的应用场景有哪些?
【4月更文挑战第6天】 React 生命周期方法应用于数据获取、订阅管理、渲染逻辑处理、用户交互响应、性能优化、资源清理、强制更新、错误处理、动画实现、代码分割、服务端渲染、路由处理、依赖注入和集成第三方库。它们帮助控制组件行为和性能,但现代开发推荐使用Hooks替代部分生命周期方法。
16 0
|
2月前
|
前端开发 Android开发 iOS开发
应用研发平台EMAS使用 aliyun-react-native-push 库接入推送和辅助通道,推送都可以收到,但是在App切到后台或者杀掉进程之后就收不到推送了,是需要配置什么吗?
【2月更文挑战第31天】应用研发平台EMAS使用 aliyun-react-native-push 库接入推送和辅助通道,推送都可以收到,但是在App切到后台或者杀掉进程之后就收不到推送了,是需要配置什么吗?
32 2
|
3月前
|
前端开发 中间件 数据安全/隐私保护
React路由进阶方法
React路由进阶方法
28 1
|
4月前
|
前端开发
React 中条件渲染的 N 种方法
React 中条件渲染的 N 种方法
18 3
|
4月前
|
前端开发
React中setState方法详细讲解
React中setState方法详细讲解
|
4月前
|
缓存 前端开发 JavaScript
第二十八章 React脚手架配置代理
第二十八章 React脚手架配置代理
|
4月前
|
前端开发 测试技术 程序员
第十五章 react脚手架
第十五章 react脚手架