react最新版本解决跨域问题

废话少说,直接上答案:

react测试版本:17.x
后端接口:http://127.0.0.1:9092/user
前端端口:http://127.0.0.1:3000
注意:每种解决方式的请求路径有所不同


方式一:在前端项目package.json中添加(有效

"proxy": "http://127.0.0.1:9092" //要请求的接口网址

前端请求写法:fetch(’/user’)
实际请求接口:“http://127.0.0.1:9092/user”


方式二:在前端项目package.json中添加(无效
(react新版本报错:报错proxy必须为字符串,不再支持这种对象写法)

"proxy": {"/api": {"target": "http://127.0.0.1:9092","changeOrigin": true,"pathRewrite": {"^/api": ""}}
}

方式三:在前端项目中使用中间件http-proxy-middleware(有效
react在项目启动时,会检测setupProxy.js文件是否存在,如果存在就会执行该文件,修改需要重新启动项目。

步骤:

  1. 安装:yarn add http-proxy-middleware -D
  2. 创建文件:src -> setupProxy.js(必须同名)
const {createProxyMiddleware} = require('http-proxy-middleware')
module.exports = function (app) {app.use(createProxyMiddleware('/api', {target: 'http://127.0.0.1:9092',changeOrigin: true,pathRewrite: { '/api': '',  //因为后端接口没有api前缀,所以这里重写(去掉前缀/api)}}))
}

前端请求写法:fetch(’/api/user’) //必须加/api,否则无法命中
实际请求接口:“http://127.0.0.1:9092/user”


方式四:后端配置,在node-koa中使用koa-cors中间件配置(有效

app.use(cors({origin: (ctx) => {const origin = ctx.headers.originreturn origin},allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],credentials: true,})
)

前端请求写法:fetch(‘http://127.0.0.1:9092/user’)
实际请求接口:“http://127.0.0.1:9092/user”


简单例子:

前端代码

import React, { useEffect } from 'react'function App() {useEffect(() => {fetch('/user')   //不同的方式修改这里,方式三还需要添加一个setupProxy.js文件,这里使用第一种方式.then(res => res.json()).then(res => {console.log(res)})})return (<div className="App">hello react</div>);
}export default App;

后端代码

const Koa = require('koa')
const app = new Koa()
const cors = require('koa-cors')
const Router = require('koa-router')
const router = new Router({prefix:'/user'})
const Mock = require('mockjs')router.get('/', (ctx) => {//此处是mock数据,与跨域无关const ret = Mock.mock({'user': {username: '@cname',sign:'@cword(8, 20)','age|18-100':18,'money|1-10000.2':1,'family|2-4':{father:'@cname',mother:'@cname',brother:'@cname',sister:'@cname'},'friends|1-3':['@last'],avatar: `@image('100×100','#50B347', '#FFF', 'Mock.js')`,isMarry:'@boolean',seniority:'@range(3, 7)',birthday:'@date',Address: `${'@region()'} - ${'@city(true)'}`,'score|1-5':'★'},})ctx.body = {status: 200,data: ret}
})app.use(router.routes()).use(router.allowedMethods())//如果使用后端跨域,开启这里
// app.use(
//     cors({//         origin: (ctx) => {//             const origin = ctx.headers.origin
//             console.log(origin);
//             return origin
//         },
//         allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
//         credentials: true,
//     })
// )app.listen(9092, () => {console.log('app is running on 9092 port')
})

请求结果



浏览器Network中显示的请求的路径是http:127.0.0.1:3000/user
但proxy已经帮转发到后端接口http:127.0.0.1:9092/user


完结:是否解决你的问题了呢?心情舒坦否?撒花。

react-17.x版本,解决跨域问题的多种方式相关推荐

  1. 【react】使用代理解决跨域问题

    [react]使用代理解决跨域问题 参考文章: (1)[react]使用代理解决跨域问题 (2)https://www.cnblogs.com/guanpingping/p/10344197.html ...

  2. SpringBoot解决跨域的5种方式

    本文来说下SpringBoot中实现跨域的5种方式. 文章目录 什么是跨域 java解决CORS跨域请求的方式 返回新的CorsFilter(全局跨域) 重写WebMvcConfigurer(全局跨域 ...

  3. 解决Vue前后端跨域问题的多种方式

    1 前言 本文主要介绍借助解决Vue前后端跨域问题的几种方式 说到ajax请求,就不得不说下xhr(XMLHttpRequest)了,它可以说是鼻祖,但是实际开发中,我们不会直接使用它,而是进行二次封 ...

  4. 什么是同源策略及解决跨域的三种方式

    同源策略 1.1.1 所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个 ip 地址,也非同源.同源策略/SOP(Same origin policy)是一种约 ...

  5. SpringBoot解决跨域问题的六种方式

    一.同源策略 同源,就是咱们域名.端口号.ip.采用的协议都相同,那么我们就是同源的 反之就是不同源的!!! 出于浏览器的同源策略限制.同源策略(Sameoriginpolicy)是一种约定,它是浏览 ...

  6. springboot项目解决跨域的几种方式

    跨域资源共享(CORS):通过修改Http协议header的方式,实现跨域.说的简单点就是,通过设置HTTP的响应头信息,告知浏览器哪些情况在不符合同源策略的条件下也可以跨域访问,浏览器通过解析Htt ...

  7. React配置代理proxy解决跨域问题

    一.在package.json中直接设置proxy 和Vue不同,React是在package.json文件中使用proxy配置 注意: create-react-app脚手架低于2.0版本时候,可以 ...

  8. react脚手架配置代理解决跨域问题

    一.问题描述: 控制台报错,出现跨域问题 二.解决方案 配置代理: 第一种配置方式: 在package.json中追加如下配置 "proxy":"http://local ...

  9. chrome 91版本 解决跨域请求SameSite

    个人网站 https://kuangyx.cn 91版本之前 地址栏输入chrome://flags并回车 搜索栏中输入SameSite by default cookies搜索,会有两项设置 改为D ...

最新文章

  1. 【错误总结】Git- remote:error: this exceeds GitHub file size limit of 100.00 MB
  2. 都在关心AI的应用,这些技术难点怎么很少提?
  3. ajax技术运用案例,第12篇:Ajax技术与项目案例
  4. 群晖备份linux分区,黑群晖二合一系统无损扩充系统分区方法补充
  5. .Net 中的封装知识点
  6. python 串口助手 简书_python用pyserial读取串口问题解决
  7. 为了分析WebRTC, 重学Windows开发
  8. 谷歌死磕亚马逊,CES 舞台上的语音入口争夺战
  9. c# chart 点值标注_C# chart控件参数设定总结
  10. c语言题模板大全,C语言试题库完整版整理版
  11. jsx怎么往js里传参数_JSX详解
  12. OSChina 周五乱弹 ——给网戒中心打电话,结果……
  13. python设置窗口位置_python中tkinter窗口位置
  14. QQ伤感日志_你教会了我爱,让我懂得了爱
  15. PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速
  16. 3-6指针与数组的天生姻缘
  17. 评论:雨林木风Linux 意义和目的是什么?
  18. golang多版本管理工具g使用(windows)
  19. xftp的免费下载和安装教程
  20. Day82_ELK(一)

热门文章

  1. haproxy mysql 配置_HAProxy + mysql 配置
  2. Tomcat 卸载(文件和服务)
  3. Uibot-Excel自动获取某个工作表的总行数、总列数,读取其全部内容
  4. python是一门面向过程的语言_1、Python 语言介绍
  5. 运用Field_II囊肿模型生成静态血管模型--MATLAB
  6. SHA256加密算法
  7. 中国移动应用商店在人才孵化上存有缺憾
  8. IDEA 多服务项目结构:Commit Changes 不显示变动文件
  9. 美国住宅太阳能:买家的市场
  10. Python中如何输出换行?