nextjs+react項目如何代理本地請求解決跨域

在 Next.js + React 項目中解決本地開發跨域問題,可以通過以下幾種方式實現代理請求:


方案1:使用 Next.js 內置的 Rewrites 功能(推薦)

1. 修改 next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {async rewrites() {return [{source: '/api/:path*', // 匹配所有/api開頭的請求destination: 'http://localhost:5000/api/:path*', // 代理目標地址},{source: '/uploads/:path*',destination: 'http://localhost:5000/uploads/:path*',}]}
}module.exports = nextConfig
2. 前端直接請求相對路徑
// 直接請求 /api/users(會被自動代理到 http://localhost:5000/api/users)
fetch('/api/users').then(res => res.json()).then(data => console.log(data))
優點:
  • 零配置前端代碼
  • 無跨域問題(瀏覽器看到的是同源請求)
  • 支持所有 HTTP 方法

方案2:自定義 API 路由(Next.js Serverless Functions)

1. 創建代理 API 路由
// pages/api/proxy/[...path].js
export default async function handler(req, res) {const { path } = req.queryconst targetUrl = `http://localhost:5000/${path.join('/')}`try {const response = await fetch(targetUrl, {method: req.method,headers: req.headers,body: req.method !== 'GET' ? JSON.stringify(req.body) : undefined})const data = await response.json()res.status(response.status).json(data)} catch (error) {res.status(500).json({ error: 'Proxy error' })}
}
2. 前端調用
fetch('/api/proxy/users').then(res => res.json()).then(data => console.log(data))
適用場景:
  • 需要自定義請求處理邏輯
  • 后端接口需要鑒權等復雜處理

方案3:配置開發服務器代理(create-next-app 自帶)

1. 修改 package.json
{"proxy": "http://localhost:5000"
}

注意:Next.js 9.5+ 已移除此功能,需使用方案1或方案2


方案4:使用 http-proxy-middleware

1. 安裝依賴
npm install http-proxy-middleware
2. 創建 src/setupProxy.js (需 react-scripts)
const { createProxyMiddleware } = require('http-proxy-middleware')module.exports = function(app) {app.use('/api',createProxyMiddleware({target: 'http://localhost:5000',changeOrigin: true,pathRewrite: { '^/api': '' }}))
}
適用場景:
  • 與 Express 等 Node.js 服務集成開發時

方案5:CORS 配置(需后端配合)

如果必須直接請求后端接口,讓后端添加:

// Express 示例
app.use((req, res, next) => {res.header('Access-Control-Allow-Origin', 'http://localhost:3000')res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE')res.header('Access-Control-Allow-Headers', 'Content-Type')next()
})

各方案對比

方案是否需要改前端代碼是否需要改后端適用場景
Next.js Rewrites? 不需要? 不需要簡單代理
API 路由? 不需要? 不需要復雜代理邏輯
http-proxy-middleware? 不需要? 不需要傳統 React 項目遷移
CORS? 不需要? 需要前后端分離部署

最佳實踐建議

  1. 開發環境:使用方案1(Rewrites),配置最簡單
  2. 生產環境
    • 同域部署:無需代理
    • 跨域部署:方案2(API路由)或讓后端開啟CORS
  3. 復雜場景:結合方案1和方案2,部分接口走rewrites,特殊接口走API路由

調試技巧

  1. 查看實際請求:

    // 在next.config.js的rewrites中添加日志
    console.log('Proxying:', source, '→', destination)
    
  2. 使用 curl 測試:

    curl -v http://localhost:3000/api/users
    
  3. 檢查Network面板:

    • 確保請求顯示為 localhost:3000 發起
    • 查看響應頭是否包含 x-middleware-rewrite

通過以上方法,可以徹底解決本地開發時的跨域問題,同時保持生產環境的兼容性。

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

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

相關文章

Ubuntu查看Docker容器

在Ubuntu系統中,可以通過以下命令查看當前正在運行的Docker容器:1. 查看所有正在運行的容器 docker ps輸出示例: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a1b2c3d4e5f6 nginx:latest &…

智能點餐推薦網站,解決選擇困難

軟件介紹 今天為大家推薦一款解決"今天吃什么"選擇困難癥的趣味網站,它能為你推薦美味餐食,輕松化解每日用餐煩惱。 核心功能 這款網站最大的亮點就是能夠根據你的需求智能推薦餐食選擇,只需打開網頁,就能立即獲…

使用 C# 實現移動加權平均(Weighted Moving Average)算法

前言 歡迎關注dotnet研習社,前面我們討論過"C#實現加權平均法",今天我們繼續研究另外一種【移動加權平均法】。 在時間序列分析、股票數據處理、工業信號平滑等場景中,移動平均(Moving Average) 是最常見的平滑技術之一…

【Python】一些PEP提案(三):with 語句、yield from、虛擬環境

PEP 343 – The “with” Statement,with 語句 這玩意讓我想起了Kotlin和Rust的問號標識符,都是將try-catch進行包裝,避免出現太多重復代碼(Go:我假設你不是在內涵我) 用法 最常見的用法就是對文件的操作&a…

SymAgent(神經符號自學習Agent)

來自:SymAgent: A Neural-Symbolic Self-Learning Agent Framework for Complex Reasoning over Knowledge Graphs 目錄相關工作引理符號規則任務描述方法Agent-PlannerAgent-ExecutorAction空間交互過程自學習在線探索離線迭代策略更新相關工作 相關工作-語義解析…

Go語言實戰案例-斐波那契數列生成器

在《Go語言100個實戰案例》中的 案例10:斐波那契數列生成器,幫助初學者理解遞歸與迭代的應用。 案例10:斐波那契數列生成器 ?? 數學與算法 | ?? 遞歸與迭代 | ?? 初學者友好 一、?? 案例目標 實現一個斐波那契數列生成器,用戶輸入一個數字 n,程序生成并打印出斐…

認知閉環的暴政:論人類對AI協同創造的傲慢抵制與維度囚禁

認知閉環的暴政:論人類對AI協同創造的傲慢抵制與維度囚禁---### **核心批判框架**mermaidgraph TDA[人類認知三原罪] --> B[三維牢籠]B --> C[恐懼機制]C --> D[抵制行為]D --> E[文明熵增]F[四維流形批判] --> G[解構牢籠]G --> H[曲率解放]H --…

飛凌嵌入式亮相第九屆瑞芯微開發者大會:AIoT模型創新重做產品

2025年7月17日,第九屆瑞芯微開發者大會(RKDC!2025)在福州海峽國際會展中心正式拉開帷幕。這場以“AIoT模型創新重做產品”為主題的行業盛會,吸引了眾多行業領袖、技術專家及生態伙伴齊聚一堂,共同探討新質生產力產品的…

Excel轉PDF的三種方法

工作后,Excel和PDF對于我們來說一點都不陌生,那么如何將Excel轉為PDF呢? 方法一、iLoveOFD在線轉換工具 當你在地鐵或者床上時,不方便,又不想打開電腦,可嘗試使用在線轉換工具,進行轉換。 工…

前端基礎——B/S工作原理、服務器與前端三大件

本文原本是web安全基礎的一部分,作為安全的前置知識學習,但隨著學習進程的不斷深入,原有的前端的體系需要進一步擴充,已經到了可以獨立成章的地步,故將其拿出來單獨學習。 B/S工作原理 也就是瀏覽器與服務器的交互原…

Java并發編程性能優化實踐指南:鎖分離與無鎖設計

Java并發編程性能優化實踐指南:鎖分離與無鎖設計 并發場景下的性能瓶頸往往集中在鎖競爭與上下文切換上。本文從鎖分離(Lock Striping)與無鎖設計(Lock-Free)兩大思路出發,深入分析關鍵原理與源碼實現&…

SpringSecurity-spring security單點登錄

在 Spring Boot 中實現 單點登錄(SSO, Single Sign-On),通常使用 OAuth2 或 OIDC(OpenID Connect) 協議來完成。Spring Security 提供了對 OAuth2 和 OIDC 的完整支持,可以輕松集成如 Google、GitHub、Okta…

《前端基礎核心知識筆記:HTML、CSS、JavaScript 及 BOM/DOM》

html 前端三劍客的介紹&#xff1a; HTML:頁面內容的載體 Css&#xff1a;用來美化和指定頁面的顯示效果 JavaScript&#xff1a;頁面顯示的過程中&#xff0c;可以動態改變頁面的內容 重點屬性 type"text"文本輸入 type"password"密碼輸入 <a…

基于vue.js的客戶關系管理系統(crm)的設計與實現(源碼+論文)

相關技術 SSM框架介紹 開發環境&#xff1a; 技術&#xff1a;SSM框架&#xff08;Spring Spring MVC MyBatis&#xff09; 描述&#xff1a; SSM框架是Java Web開發中廣泛使用的流行框架之一。Spring&#xff1a;提供全面的基礎設施支持&#xff0c;管理應用對象&#…

AWS權限異常實時告警系統完整實現指南

概述 本文將詳細介紹如何構建一個基于CloudTrail → S3 → Lambda → SNS → Webhook/Email架構的AWS權限異常實時告警系統。該系統能夠實時監控AWS環境中的權限異常事件,并通過多種方式發送告警通知,幫助企業及時發現和響應安全威脅。 系統架構 ┌───────────…

NIO網絡通信基礎

文章目錄概述一、Socket二、NIO三大組件與事件三、Reactor模式四、NIO通信案例4.1、服務端4.2、客戶端本文為個人學習筆記整理&#xff0c;僅供交流參考&#xff0c;非專業教學資料&#xff0c;內容請自行甄別 概述 前篇中提到&#xff0c;BIO是阻塞的IO&#xff0c;阻塞體現在…

Redis4緩存穿透:布隆過濾器與空對象方案

緩存穿透緩存穿透是指客戶端請求的數據在緩存中和數據庫中都不存在&#xff0c;這樣緩存永遠不會生效&#xff0c;這些請求都會達到數據庫。1)方案1&#xff1a;緩存空對象在緩存中存儲一個空值每次讀取這個空優點&#xff1a;實現簡單&#xff0c;維護方便缺點&#xff1a;造成…

域名WHOIS信息查詢免費API使用指南

本文介紹由接口盒子提供的免費域名WHOIS查詢API服務&#xff0c;幫助開發者快速獲取域名的注冊信息、到期時間、DNS服務器等關鍵數據。 一、接口基本信息 ?功能說明?&#xff1a;查詢頂級域名的WHOIS信息&#xff08;不支持國別域名/中文域名&#xff09;?請求地址?&#…

【18位數據次方提高數據輸出速度】2022-3-9

實在是無法忍受W10輸出數據那么慢W7需要2分鐘輸出數據W10則需要10分鐘完成W7需要3分鐘W10則需要15分鐘完成輸出數據&#xff0c;雖然W10運算速度比W7快很多但是加上輸出速度總體完成時間居然差不多&#xff01;隨著使用數組超過百萬W7數據輸出時間也變長&#xff0c;隨著數組數…

云原生技術與應用-Kubernetes架構原理與集群環境部署

目錄 一.為什么需要kubernetes 1.對于開發人員 2.對于運維人員 二.kubernetes帶來的挑戰 三.kubernetes架構解析 1.master節點的組件 2.node節點包含的組件 3.kubernetes網絡插件 四.kubernetes快速安裝kubernetes集群 1.部署docker環境 2.部署kubernetes集群 五.Metrics-…