前端跨域解決方案(7):Node中間件

1 Node 中間件核心

1.1 為什么開發環境需要 Node 代理?

在前端開發中,我們常遇到:前端運行在localhost:3000,后端 API 在localhost:4000,跨域導致請求失敗。而傳統解決方案有以下局限性:

  1. 修改后端 CORS 配置:需后端開發配合,增加溝通成本;生產環境與開發環境配置不一致。

  2. 配置 Nginx 反向代理:修改配置后需重啟服務,打斷開發流程;配置文件管理復雜。

Node 中間件代理(如http-proxy-middleware)可在前端開發服務器中直接配置跨域代理,無需修改 Nginx,適合開發階段使用。Node 中間件代理有以下優勢:

  • 開發效率提升:前端獨立配置,無需等待后端調整

  • 熱更新支持:修改代理規則后無需重啟服務器

  • 環境隔離:開發環境專用配置,不影響生產部署

  • 調試便利:可攔截、修改請求 / 響應內容

1.2?http-proxy-middleware

http-proxy-middleware?是一個用于 Node.js 的中間件,它可以在你的應用中創建一個反向代理。這在處理跨域請求、添加負載均衡、或者在開發環境中連接到不同的服務等場景中非常有用。

1.2.1?安裝 http-proxy-middleware

可以使用 npm 或者 yarn 來安裝這個包:

# 使用 npm 安裝
npm install http-proxy-middleware --save-dev# 或使用 yarn
yarn add http-proxy-middleware --dev

1.2.2 核心使用模式

你可以使用?createProxyMiddleware?函數來創建一個代理。這個函數接收一個配置對象,你可以在這個對象中指定代理的目標、路徑重寫規則等選項:

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');const app = express();// 代理所有以 /api 開頭的請求
app.use('/api',createProxyMiddleware({target: 'http://localhost:4000',      // 后端服務地址changeOrigin: true,                   // 修改請求頭中的 hostpathRewrite: { '^/api': '' },         // 重寫請求路徑logLevel: 'debug',                    // 調試日志onProxyReq: (proxyReq, req, res) => { // 請求攔截器console.log(`轉發請求: ${req.method} ${req.url}`);},onProxyRes: (proxyRes, req, res) => { // 響應攔截器console.log(`接收響應: ${proxyRes.statusCode}`);}})
);app.listen(3000, () => {console.log('開發服務器運行在 http://localhost:3000');
});

1.2.3 配置選項詳解

選項類型描述默認值
targetstring后端服務的目標地址(必填)-
changeOriginboolean修改請求頭中的?Host?為目標地址,解決部分服務器的跨域限制false
pathRewriteobject/function重寫請求路徑,支持正則表達式替換{}
secureboolean是否驗證 SSL 證書true
logLevelstring日志級別:debug/info/warn/errorinfo
onProxyReqfunction(proxyReq, req, res)請求發送前的回調函數,可修改請求頭或請求體-
onProxyResfunction(proxyRes, req, res)響應返回后的回調函數,可修改響應頭或響應體-
onErrorfunction(err, req, res)代理過程中出錯時的回調函數-
timeoutnumber請求超時時間(毫秒)0(無超時)
headersobject添加自定義請求頭

2 實戰案例

以在 Express 中配置 http-proxy-middleware 為例。

2.1 安裝依賴

npm install express http-proxy-middleware

2.2 前端開發服務器(servera.js)

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();// 靜態資源服務(前端頁面)
app.use(express.static('public'));// 配置API代理
app.use('/api', createProxyMiddleware({target: 'http://localhost:4000',       // 后端API地址changeOrigin: true,                    // 修改請求頭host為target域名,解決跨域pathRewrite: {'^/api': ''                         // 去除URL中的/api前綴}
}));app.listen(3000, () => {console.log('前端開發服務器運行在 http://localhost:3000');
});

2.3?后端 API 服務器(serverb.js)

const express = require('express');
const app = express();
const users = [{ id: 1, name: '張三' }];app.get('/users', (req, res) => {res.json(users);
});app.listen(4000, () => {console.log('后端API服務器運行在 http://localhost:4000');
});

2.4 前端請求(index.html)

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>a</title>
</head><body><script>// 定義一個立即執行的異步函數(async function () {try {// 使用 fetch API 發送 GET 請求到指定的 URLconst response = await fetch('http://localhost:3000/api/users', {// 指定請求方法為 GETmethod: 'GET',// 指定請求頭,表明期望的響應格式為 JSONheaders: {'Accept': 'application/json'}// 使用 then 方法將響應對象轉換為 JSON 格式}).then(response => response.json())// 打印獲取到的響應console.log('response ',response);} catch (error) {// 如果有任何錯誤,打印錯誤信息console.error('Error:', error);}// 立即執行上述定義的函數})();</script>
</body>
</html>

Node 中間件代理是前端開發階段的 “跨域神器”,無需修改后端代碼,只需在前端服務器配置即可解決跨域問題,大幅提升開發效率。

下一章將介紹 window.name?方案 ,敬請期待!

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

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

相關文章

iwebsec靶場-文件上傳漏洞

01-前端JS過濾繞過 1&#xff0c;查看前端代碼對文件上傳的限制策略 function checkFile() { var file document.getElementsByName(upfile)[0].value; if (file null || file "") { alert("你還沒有選擇任何文件&a…

GitHub 趨勢日報 (2025年06月23日)

&#x1f4ca; 由 TrendForge 系統生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日獲星趨勢圖 今日獲星趨勢圖 390 suna 387 system-prompts-and-models-of-ai-tools 383 Web-Dev-For-Beginners…

告別水印煩惱,一鍵解鎖高清無痕圖片與視頻!

在這個數字化飛速發展的時代&#xff0c;無論是設計小白還是創意達人&#xff0c;都可能遇到這樣的困擾&#xff1a;心儀的圖片或視頻因水印而大打折扣&#xff0c;創意靈感因水印而受限。別急&#xff0c;今天就為大家帶來幾款神器&#xff0c;讓你輕松告別水印煩惱&#xff0…

LangChain4j在Java企業應用中的實戰指南:構建RAG系統與智能應用-2

LangChain4j在Java企業應用中的實戰指南&#xff1a;構建RAG系統與智能應用-2 開篇&#xff1a;LangChain4j框架及其在Java生態中的定位 隨著人工智能技術的快速發展&#xff0c;尤其是大語言模型&#xff08;Large Language Models, LLMs&#xff09;的廣泛應用&#xff0c;…

Cola StateMachine 的無狀態(Stateless)特性詳解

Cola StateMachine 的無狀態&#xff08;Stateless&#xff09;特性詳解 在現代分布式系統中&#xff0c;無狀態設計是構建高可用、可擴展服務的關鍵原則之一。Cola StateMachine 作為一款輕量級的狀態機框架&#xff0c;通過其獨特的設計理念實現了良好的無狀態特性。本文將深…

使用事件通知來處理頁面回退時傳遞參數和賦值問題

背景。uniapp開發微信小程序。在當前頁面需要選擇條件&#xff0c;如選擇城市。會打開新的頁面。此時選擇之后需要關閉頁面回到當初的頁面。但問題出現了。onLoad等事件是不會加載的。相關鏈接。uniapp頁面通訊說明使用事件通知來處理頁面回退時傳遞參數和賦值問題 頁面之間的…

騰訊云COS“私有桶”下,App如何安全獲得音頻調用流程

流程圖 #mermaid-svg-Phy4VCltBRZ90UH8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Phy4VCltBRZ90UH8 .error-icon{fill:#552222;}#mermaid-svg-Phy4VCltBRZ90UH8 .error-text{fill:#552222;stroke:#552222;}#me…

基于深度學習的側信道分析(DLSCA)Python實現(帶測試)

一、DLSCA原理介紹 基于深度學習的側信道分析(DLSCA)是一種結合深度神經網絡與側信道分析技術的密碼分析方法。該方法利用深度學習模型從能量消耗、電磁輻射等側信道信息中提取與密鑰相關的特征模式。相比傳統分析方法&#xff0c;DLSCA能夠自動學習復雜的特征關系&#xff0c…

云原生 CAD 讓制造業設計協同更便捷

隨著互聯網、云計算技術的突飛猛進&#xff0c;CAD向著網絡化、協同化的方向快速發展&#xff0c;云CAD軟件逐漸映入人們的眼簾。云原生CAD不僅打破了傳統CAD軟件對硬件配置的依賴&#xff0c;更以數據驅動的協同創新模式&#xff0c;重塑了制造業的產品研發流程與組織協作形態…

Docker容器核心操作指南:`docker run`參數深度解析

技術聚焦 作為容器化技術的起點&#xff0c;docker run命令承擔著90%的容器創建工作。其關鍵參數-d&#xff08;后臺模式&#xff09;與-it&#xff08;交互模式&#xff09;的合理運用&#xff0c;直接影響容器行為模式與運維效率。本文將深度拆解兩大模式的應用場景與…

基于單片機的語音控制設計(論文)

摘要 自然語音作為人機交互在目前得以廣泛的應用以及極大的發展前景。該設計介紹了基于非指定人語音芯片LD3320的語音控制器結構及其實現語音控制的方法。該語音控制器利用STM32F103C8T6單片機作為主要控制器&#xff0c;控制芯片對輸入的進行語音識別并處理&#xff0c;根據語…

【論文閱讀 | CVPRW 2023 |CSSA :基于通道切換和空間注意力的多模態目標檢測】

論文閱讀 | CVPRW 2023 |CSSA &#xff1a;基于通道切換和空間注意力的多模態目標檢測 1.摘要&&引言2.方法2.1 框架概述2.2 通道切換通道注意力2.3 空間注意力 3. 實驗3.1 實驗設置3.1.1 數據集3.1.2 實現細節3.1.3 評估指標 3.2 對比研究3.2.1 定量結果3.2.2 定性結果…

《前端資源守衛者:SRI安全防護全解析》

SRI&#xff08;子資源完整性&#xff09;作為守護前端安全的隱形盾牌&#xff0c;以精妙的技術設計構建起資源驗證防線。深入理解其工作邏輯與配置方法&#xff0c;是每位前端開發者筑牢應用安全的必修課。 SRI的核心價值&#xff0c;在于為外部資源打造獨一無二的“數字身份…

項目需求評審報告參考模板

該文檔是需求評審報告模板 內容涵蓋評審基礎信息,如項目名稱、評審時間、地點、級別、方式等;包含評審簽到表,記錄角色、部門、職務、姓名等信息;還有評審工作量統計相關內容;以及評審問題跟蹤表,記錄問題描述、狀態、解決人及時限等,還附有填表說明,對評審適用范圍、工…

從依賴進口到自主創新:AI 電子設計系統如何重塑 EDA 全流程

EDA全稱是Electronic Design Automation&#xff0c;即電子設計自動化&#xff0c;是利用計算機軟件完成電路設計、仿真、驗證等流程的設計工具&#xff0c;貫穿于芯片和板級電路設計、制造、測試等環節&#xff0c;是不可或缺的基礎設計工具。 EDA與電子材料、裝備是電子信…

前端工程化之微前端

微前端 微前端基本知識主要的微前端框架iframe優點&#xff1a;缺點&#xff1a; single-spa示例主應用spa-root-config.jsmicrofrontend-layout.htmlindex.ejs 子應用spa-react-app2.jsroot.component.js 修改路由spa-demo/microfrontend-layout.htmlspa-demo/react-app1/webp…

MemcacheRedis--緩存服務器理論

Memcached/redis是高性能的分布式內存緩存服務器,通過緩存數據庫查詢結果&#xff0c;減少數據庫訪問次數&#xff0c;以提高動態Web等應用的速度、 提高可擴展性。 緩存服務器作用: 加快訪問速度 ,緩解數據庫壓力 1. memcached&#xff08;單節點在用&#xff09; 1.1 特點 1…

【stm32】標準庫學習——I2C

目錄 一、I2C 1.I2C簡介 2.MPU6050參數 3.I2C時序基本單元 二、I2C外設 1.I2C外設簡介 2.配置I2C基本結構 3.初始化函數模板 4.常用函數 一、I2C 1.I2C簡介 本節課使用的是MPU6050硬件外設 2.MPU6050參數 3.I2C時序基本單元 這里發送應答是指主機發送&#xff0c;即…

HSA22HSA29美光固態芯片D8BJVC8BJW

HSA22HSA29美光固態芯片D8BJVC8BJW 美光固態芯片D8BJVC8BJW系列&#xff1a;技術革新與行業應用深度解析 一、技術解析&#xff1a;核心架構與創新突破 美光D8BJVC8BJW系列固態芯片&#xff08;如MT29F8T08EQLEHL5-QAES:E、MT29F512G08CUCABH3-12Q等&#xff09;的技術競爭力…

【Linux網絡與網絡編程】06.應用層協議HTTP

前言 雖然應用層協議是我們程序猿自己定的&#xff0c;但實際上已經有大佬們定義了一些現成的又非常好用的應用層協議供我們直接參考使用&#xff0c;HTTP(超文本傳輸協議)就是其中之一。 在互聯網世界中&#xff0c;HTTP&#xff08;HyperText Transfer Protocol&#xff0c…