【React】通過 fetch 發起請求,設置 proxy 處理跨域

  • fetch 基本使用
  • 跨域處理

fetch 基本使用

在node使用原生ajax發請求:XMLHttpRequest()1.獲取xhr對象  2.注冊回調函數  3.設置參數,請求頭  4.發起連接原生ajax沒有帶異步處理 promise;原生ajax封裝一下,以便重復調用jQuery:$ajax()Vue:axiosReact:fetch 已經封裝好的ajax,并且帶promise處理

src\utils\http.js(請求的封裝)

/*http({url:"",method:"",params:{}  |  data:{}    --------get請求params,post請求data}).then(res=>{//在這里直接拿到數據,不想要兩次.then才拿到})使用token的內容也封裝進去
*/const BASE_URL = '/api'  //基礎請求路徑  http://172.16.235.16:8888/*封裝分析:get請求數據拼接到urllet xxx={id:1,username:"admin",password:123}fetch("http://localhost:8888/login/getuser?id=1&username=admin&password=123")fetch("http://localhost:8888/login/getuser?"+函數())函數(xxx){//對xxx進行處理let result= id=1&username=admin&password=123return  result}
*/
const jsonChangeToUrl=(json)=>{let arr=[];for(let name in json){arr.push(name+"="+json[name]);  //[id=1,name=admin,pwd=123]}return arr.join("&");  //"id=1&name=admin&pwd=123"
}const http=({url,method='get',params={},data={}})=>{if(!url)return; //如果沒有傳遞請求路徑,就結束請求const token=sessionStorage.getItem("token") || ""; //發起請求之前先獲取tokenlet options={method,headers:{token},// body:JSON.stringify(data)}if(method.toLowerCase()==='post'){options.body=JSON.stringify(data)}return fetch(BASE_URL+url+"?"+jsonChangeToUrl(params),options).then(response => {if(response.status === 401){ //token失效window.location.href="/login";  //瀏覽器url地址欄}else {return response.json();}})
}export default http;

src\pages\login\index.js (使用fetch發起請求)

import { Button,Form, Input,Radio,message } from 'antd';
import './index.scss'
import {useNavigate} from "react-router-dom";
import http from "../../utils/http"; //二次封裝后的fetchconst Login = () => {const navigate = useNavigate();//點擊登錄時觸發const onFinish = values => { //表單提交觸發函數,value:表單輸入框的值// console.log('Success:', values);  //{id:1,username:admin,type:管理員}//未封裝過的fetch發的請求/*fetch("http://localhost:8888/login/getuser?username=201&password=201&type=管理員").then(resp => {console.log(resp)return resp.json()  //resp.json()是將返回的數據轉為對象給我用;resp.text()返回的只是單純的文本時可用}).then(data => {console.log(data)}).catch((err)=>{console.log("錯誤信息:"+err)})*///自己封裝的fetchhttp({url:"/login/getuser",params:values}).then(res => {console.log(res)sessionStorage.setItem("token",res.token)sessionStorage.setItem("user",JSON.stringify(res.data[0]))sessionStorage.setItem("power",JSON.stringify(res.power))if(res.code === 200){message.success("登錄成功") //提示氣泡navigate("/home");}})};return (<div className={"loginBox"}><Formname="basic"labelCol={{ span: 5 }}wrapperCol={{ span: 16 }}initialValues={{  //初始值roleLgoin:"學生"  //綁在checkbox上的}}onFinish={onFinish}autoComplete="off"><Form.Itemlabel="用戶名"name="username"rules={[{ required: true, message: '請輸入您的用戶名!' }]}><Input /></Form.Item><Form.Itemlabel="密碼"name="password"rules={[{ required: true, message: '請輸入您的密碼名!' }]}><Input.Password /></Form.Item><Form.Item name="roleLgoin" label={null}><Radio.Groupname="radiogroup"options={[{ value: '學生', label: '學生' },{ value: '管理員', label: '管理員' }]}/></Form.Item><Form.Item label={null}><Button type="primary" htmlType="submit">Submit</Button></Form.Item></Form></div>)}export default Login;

跨域處理

1.react配置文件暴露彈出來:git add .git commit -m 'msg'npm run eject2.找到配置文件:webpackDevServer.config.js  //在103行的proxy屬性,代理只在開發階段有用,項目上線要刪掉proxy:{'/api':{target: 'http://localhost:8888',changeOrigin: true,pathRewrite: {'^/api': ' '}}}

不建議直接暴露文件的不可逆操作,建議使用 craco (create-react-app config)在 React 腳手架的基礎上進行 Webpack 配置。具體內容在Webpack\Vite欄中查看

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77230.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77230.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77230.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis(二) - Redis命令詳解

文章目錄 前言一、啟動Redis并進入客戶端1. 啟動Redis2. 進入Redis客戶端3. 使用IDEA連接Redis 二、查看命令幫助信息1. 查看所有命令2. 查看指定命令幫助 三、鍵操作命令1. set命令2. mset命令3. keys命令4. get命令5. mget命令6. dump命令7. exists命令8. type命令9. rename命…

【Qt】初識Qt(二)

目錄 一、顯示hello world1.1 圖形化界面1.2 寫代碼 二、對象樹三、使用輸入框顯示hello world四、使用按鈕顯示hello world 一、顯示hello world 有兩種方式實現hello world&#xff1a; 通過圖形化界面&#xff0c;在界面上創建出一個控件&#xff0c;顯示hello world通過寫…

空調制冷量和功率有什么關系?

空調的制冷量和功率是衡量空調性能的兩個核心參數,二者既有區別又緊密相關,以下是具體解析: 1. 基本定義 制冷量(Cooling Capacity)指空調在單位時間內從室內環境中移除的熱量,單位為 瓦特(W) 或 千卡/小時(kcal/h)。它直接反映空調的制冷能力,數值越大,制冷效果越…

【prometheus+Grafana篇】Prometheus與Grafana:深入了解監控架構與數據可視化分析平臺

&#x1f4ab;《博主主頁》&#xff1a;奈斯DB-CSDN博客 &#x1f525;《擅長領域》&#xff1a;擅長阿里云AnalyticDB for MySQL(分布式數據倉庫)、Oracle、MySQL、Linux、prometheus監控&#xff1b;并對SQLserver、NoSQL(MongoDB)有了解 &#x1f496;如果覺得文章對你有所幫…

基于n8n的AI應用工作流原理與技術解析

基于n8n的AI應用工作流原理與技術解析 在AI技術深度融入企業數字化轉型的今天&#xff0c;開源工作流自動化工具n8n憑借其靈活的架構和強大的集成能力&#xff0c;成為構建智能自動化流程的核心引擎。本文將從技術原理、AI融合機制、典型應用場景三個維度&#xff0c;解析n8n在…

經濟指標學習(二)

系列文章目錄 文章目錄 系列文章目錄1、市凈率**一、定義與計算****二、核心意義****三、應用場景****四、局限性****五、分類與衍生指標****總結** 2、市銷率**一、定義與計算****二、核心意義****三、優缺點分析****四、適用場景****五、與其他指標的對比****六、實際應用案例…

大語言模型減少幻覺的常見方案

什么是大語言模型的幻覺 大語言模型的幻覺&#xff08;Hallucination&#xff09;是指模型在生成文本時&#xff0c;輸出與輸入無關、不符合事實、邏輯錯誤或完全虛構的內容。這種現象主要源于模型基于概率生成文本的本質&#xff0c;其目標是生成語法合理、上下文連貫的文本&…

CSS 美化頁面(四)

一、浮動float屬性 ?屬性值??描述??適用場景?left元素向左浮動&#xff0c;騰出右側空間供其他元素使用&#xff0c;其他內容會圍繞在其右側?。橫向排列元素&#xff08;如導航菜單&#xff09;、圖文混排布局?。right元素向右浮動&#xff0c;騰出左側空間供其他元素使…

如何將 .txt 文件轉換成 .md 文件

一、因為有些軟件上傳文件的時候需要 .md 文件&#xff0c;首先在文件所在的目錄中&#xff0c;點擊“查看”&#xff0c;然后勾選上“文件擴展名”&#xff0c;這個時候該目錄下的所有文件都會顯示其文件類型了。 二、這時直接對目標的 .txt 文件進行重命名&#xff0c;把后綴…

C++ 迭代器失效詳解:如何避免 vector 操作中的陷阱

目錄 1. 什么是迭代器失效&#xff1f; 2. 哪些操作會導致迭代器失效&#xff1f; 2.1 vector 的插入操作&#xff08;push_back, insert&#xff09; 示例&#xff1a;push_back 導致迭代器失效 如何避免&#xff1f; 2.2 vector 的刪除操作&#xff08;erase, pop_back&…

(EtherCAT 轉 EtherNet/IP)EtherCAT/Ethernet/IP/Profinet/ModbusTCP協議互轉工業串口網關

型號 協議轉換通信網關 EtherCAT 轉 EtherNet/IP MS-GW12 概述 MS-GW12 是 EtherCAT 和 EtherNet/IP 協議轉換網關&#xff0c;為用戶提供兩種不同通訊協議的 PLC 進行數據交互的解決方案&#xff0c;可以輕松容易將 EtherNet/IP 網絡接入 EtherCAT 網絡中&#xff0c;方便…

榕壹云酒水定制系統:基于THinKPHP+MySQL+UniApp打造數字化時代的個性化購酒新體驗

數字化浪潮下的酒水定制新機遇 在消費升級與個性化需求崛起的背景下&#xff0c;傳統酒水行業正面臨數字化轉型的迫切需求。為此&#xff0c;我們團隊基于ThinkPHPMySQLUniApp技術棧&#xff0c;開發了一套榕壹云酒水定制系統&#xff0c;旨在通過數字化手段解決消費者個性化購…

GR00T N1:面向通用類人機器人的開放基礎模型

摘要 通用型機器人需要具備多功能的身體和智能的大腦。近年來&#xff0c;類人機器人的發展在構建人類世界中的通用自主性硬件平臺方面展現出巨大潛力。一個經過大量多樣化數據源訓練的機器人基礎模型&#xff0c;對于使機器人能夠推理新情況、穩健處理現實世界的多變性以及快…

WebRTC實時通話EasyRTC嵌入式音視頻通信SDK,構建智慧醫療遠程會診高效方案

一、方案背景 當前醫療領域&#xff0c;醫療資源分布不均問題尤為突出&#xff0c;大城市和發達地區優質醫療資源集中&#xff0c;偏遠地區醫療設施陳舊、人才稀缺&#xff0c;患者難以獲得高質量的醫療服務&#xff0c;制約醫療事業均衡發展。 EasyRTC技術基于WebRTC等先進技…

深入理解主成分分析(PCA):原理、算法與應用

內容摘要 本文深入剖析主成分分析&#xff08;PCA&#xff09;技術。介紹其通過正交變換簡化數據維度的核心原理&#xff0c;詳細推導基于最小投影距離和最大投影方差的算法過程&#xff0c;總結算法流程步驟。全面分析PCA的優缺點&#xff0c;并對比其與KPCA的差異。同時闡述…

uniapp-商城-25-頂部模塊高度計算

計算高度&#xff1a; 使用computed進行頂部模塊的計算。 總高度&#xff1a;bartotalHeight log 介紹--收款碼這一條目 也就是上一章節的title的高度計算 bodybarheight。 在該組件中&#xff1a; js部分的代碼&#xff1a; 包含了導出的名字&#xff1a; shop-head…

【MCP】第一篇:MCP協議深度解析——大模型時代的“神經連接層“架構揭秘

【MCP】第一篇&#xff1a;MCP協議深度解析——大模型時代的"神經連接層"架構揭秘 一、什么是MCP&#xff1f;二、為什么需要MCP&#xff1f;三、MCP的架構四、MCP與AI交互的原理4.1 ReAct&#xff08;Reasoning Acting&#xff09;模式4.2 Function Calling 模式 五…

李飛飛團隊新作WorldScore:“世界生成”能力迎來統一評測,3D/4D/視頻模型同臺PK

從古老神話中對世界起源的幻想&#xff0c;到如今科學家們在實驗室里對虛擬世界的構建&#xff0c;人類探索世界生成奧秘的腳步從未停歇。如今&#xff0c;隨著人工智能和計算機圖形學的深度融合&#xff0c;我們已站在一個全新的起點&#xff0c;能夠以前所未有的精度和效率去…

[react]Next.js之自適應布局和高清屏幕適配解決方案

序言 閱讀前首先了解即將要用到的兩個包的作用 1.postcss-pxtorem 自動將 CSS 中的 px 單位轉換為 rem 單位按照設計稿尺寸直接寫 px 值&#xff0c;由插件自動計算 rem 值 2.amfe-flexible 動態設置根元素的 font-size&#xff08;即 1rem 的值&#xff09;根據設備屏幕寬度和…

C# 如何比較兩個List是否相等?

簡介 在 C# 里&#xff0c;比較兩個 List 是否相等&#xff0c;需要考慮多個方面&#xff0c;例如列表中的元素順序、元素本身是否相等。下面介紹幾種常見的比較方法&#xff1a; 基本類型比較&#xff08;元素順序必須一致&#xff09; var list1 new List<int> { 1…