当前位置: 首页 > article >正文

解决分布式React前端在本地开发环境的跨域问题

原创/朱季谦

在前后端分离的分布式架构中,跨域是一道无法绕过去的门槛,众所周知,生产环境上解决跨域最便捷的方式是使用Nginx来处理,那么,在本地开发环境又该如何处理呢?

React框架里处理跨域问题,可以使用http-proxy-middleware库解决。

http-proxy-middleware可实现全局设置,将客户端请求转发到目标服务器,从而实现代理服务器功能,进而解决模块化前端跨域访问的问题。

本文基于SpringBoot+React环境进行说明。

1.前端下载依赖

npm install --save-dev http-proxy-middleware

2.在src目录下新建setupProxy.js文件

 1 const { createProxyMiddleware } = require('http-proxy-middleware');
 2 module.exports = function(app) {
 3 // /api 表示代理路径
 4 //target 表示目标服务器的地址
 5     app.use(
 6         '/api/system',
 7         createProxyMiddleware({
 8             // http://localhost:4000/ 地址只是示例,实际地址以项目为准
 9             target: 'http://127.0.0.1:8081',
10             // 跨域时一般都设置该值 为 true
11             changeOrigin: true,
12             // 重写接口路由
13             // pathRewrite: {
14             //     '^/admin': '',// 这样处理后,最终得到的接口路径为: http://localhost:8080/xxx
15             // }
16         })
17     );
18     
19       app.use(
20         '/admin/example',
21         createProxyMiddleware({
22             target: 'http://127.0.0.1:8080',
23             changeOrigin: true,
24         })
25     );
26 }

这里需要注意一点是,在http-proxy-middleware的1.0.0之前的版本与之后的版本,两者对模块引引用是存在差别的,如:

0.x.x版本的引用方式是:

  1 const proxy=require('http-proxy-middleware');

1.0.0之后的版本引用方式:

  1 const {createProxyMiddleware}=require('http-proxy-middleware');

该前端对应的后端设置如下:

1 server:
2   port: 8081
3   servlet:
4     context-path: /api
5     

按照以上设置,即可实现本地开发环境解决跨域问题,当然,这里只适合在开发环境进行开发时设置,若发布到生产上后,最好方式是通过nginx代理来进行解决跨域问题。


http://www.kler.cn/news/156448.html

相关文章:

  • 记录一次docker搭建tomcat容器的网页不能访问的问题
  • fork使用git可视化管理工具
  • 什么是迁移学习
  • Pytorch当中transpose()和permute()函数的区别
  • 自己生成二维码
  • 配置spring boot3后redis NOAUTH Authentication required
  • C语言扫雷游戏
  • 编程题:电话号码
  • 深入理解GMP模型
  • yum方式安装Mariadb多主集群安装和配置-centos9stream-mariadb10.5.16(实战建议配置)
  • java面向对象 + 内存解析
  • YOLOv8改进 | 2023 | 通过RFAConv重塑空间注意力(深度学习的前沿突破)
  • 【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.5p1(亲测无问题,建议收藏)
  • 树莓派使用Nginx+cpolar内网穿透实现无公网IP访问内网本地站点
  • 【从删库到跑路 | MySQL总结篇】事务详细介绍
  • GO基础之基本数据类型
  • ArcGIS提示当前许可不支持影像服务器
  • 【Linux | 编程实践】防火墙 (网络无法访问)解决方案 Vim常用快捷键命令
  • Scala--1
  • vue.draggable拖拽——岗位切换如何判断?
  • Kubernetes(K8s)_15_CNI
  • linux 内核对象介绍
  • Python的模块与库,及if __name__ == ‘__main__语句【侯小啾python领航班系列(二十四)】
  • SimCSE论文阅读
  • 2023年年末Java面试题
  • Spring Task 定时任务框架
  • read()之后操作系统都干了什么
  • 自动驾驶学习笔记(十四)——感知算法
  • Ai2 Starter模拟器:中文绿色最新版下载及使用方法
  • Pytorch进阶教学——训练一个图像分类模型(GPU)