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

前端开发避坑指南:用Node.js代理轻松解决本地联调跨域问题(附http-proxy-middleware配置)

前端联调实战Node.js反向代理的工程化解决方案跨域问题就像前端开发路上的减速带每次联调都得颠簸几下。想象这样的场景你正在本地调试一个电商网站前端跑在localhost:8080后端API服务在localhost:3000。每次点击加入购物车按钮浏览器都会无情地抛出一个CORS错误。传统的解决方案要么需要后端配合修改CORS头要么就得冒险禁用浏览器安全策略——这两种方法都像是在伤口上贴创可贴治标不治本。1. 为什么反向代理是前端开发的瑞士军刀现代前端开发早已不是简单的HTMLCSS组合拳。随着SPA架构的普及和微服务后端的兴起前后端分离开发模式已成为行业标准。这种架构带来了开发效率的提升却也引入了跨域这个老朋友。反向代理之所以成为解决方案的首选是因为它完美契合了前端开发流程的三大需求安全性不需要修改浏览器安全设置或后端CORS配置可维护性代理规则可以版本化管理随项目一起迭代灵活性支持路径重写、请求拦截等高级功能与常见的JSONP或CORS方案相比反向代理具有明显优势方案类型实现复杂度安全性适用场景维护成本JSONP低差老旧系统兼容高CORS中中生产环境中反向代理中高开发/测试环境低2. 构建你的第一个代理服务器让我们从最基础的HTTP服务器开始逐步构建一个功能完整的代理解决方案。首先确保你的开发环境已经准备好# 初始化项目 mkdir proxy-demo cd proxy-demo npm init -y npm install http-proxy-middleware express创建server.js文件这是我们的代理服务器核心const express require(express); const { createProxyMiddleware } require(http-proxy-middleware); const app express(); // 静态文件服务 app.use(express.static(public)); // 代理配置 const apiProxy createProxyMiddleware(/api, { target: http://localhost:3000, changeOrigin: true, pathRewrite: { ^/api: // 移除路径中的/api前缀 }, onProxyReq: (proxyReq) { console.log(代理请求: ${proxyReq.path}); } }); app.use(apiProxy); app.listen(8080, () { console.log(代理服务器运行在 http://localhost:8080); });这个配置实现了几个关键功能将/api开头的请求转发到后端服务自动处理Origin头变更支持路径重写去除API前缀提供请求日志便于调试3. 与现代前端工具链集成现代前端项目很少从零开始搭建更多是使用Vite、Webpack或Create React App等工具初始化。幸运的是这些工具都内置或支持代理配置。3.1 Vite配置示例在vite.config.js中添加代理规则export default defineConfig({ server: { proxy: { /api: { target: http://localhost:3000, changeOrigin: true, rewrite: path path.replace(/^\/api/, ) } } } })3.2 Webpack DevServer配置对于使用webpack-dev-server的项目修改webpack.config.js:module.exports { devServer: { proxy: { /api: { target: http://localhost:3000, secure: false, bypass: (req) { if(req.headers.accept.indexOf(html) ! -1) { return /index.html; } } } } } }4. 高级代理技巧与实战经验基础配置能满足大部分需求但实际开发中总会遇到各种边界情况。以下是几个实战中总结的技巧4.1 多环境配置管理不同环境需要不同的代理目标可以通过环境变量来管理const env process.env.NODE_ENV || development; const targets { development: http://localhost:3000, staging: https://api-staging.example.com, production: https://api.example.com }; app.use(/api, createProxyMiddleware({ target: targets[env], changeOrigin: true }));4.2 WebSocket代理现代应用经常使用WebSocket代理配置需要特别处理app.use(/socket, createProxyMiddleware({ target: ws://localhost:3001, ws: true, logLevel: debug }));4.3 请求/响应拦截有时需要在代理过程中修改请求或响应app.use(/api, createProxyMiddleware({ target: http://localhost:3000, onProxyReq: (proxyReq, req, res) { // 添加自定义请求头 proxyReq.setHeader(X-Special-Proxy-Header, foobar); }, onProxyRes: (proxyRes, req, res) { // 修改响应数据 if(proxyRes.headers[content-type] application/json) { let body ; proxyRes.on(data, (chunk) { body chunk; }); proxyRes.on(end, () { try { const data JSON.parse(body); data.proxied true; res.end(JSON.stringify(data)); } catch(err) { res.end(body); } }); return; } proxyRes.pipe(res); } }));5. 调试与问题排查即使配置正确代理问题仍可能发生。以下是一些常见问题及解决方法404错误检查目标URL是否正确确认后端服务正在运行使用curl或Postman直接测试后端接口CORS问题依然存在确保changeOrigin: true检查请求头是否完整后端可能仍需配置基本的CORS代理不生效确认请求路径匹配代理规则检查中间件顺序代理中间件应放在静态文件中间件之后查看代理日志一个实用的调试技巧是在代理配置中添加日志app.use(/api, createProxyMiddleware({ target: http://localhost:3000, logLevel: debug, onError: (err, req, res) { console.error(代理错误:, err); res.status(500).json({ error: 代理服务异常 }); } }));在实际项目中我遇到过最棘手的问题是路径重写导致的无限循环。后来发现是因为重写规则过于宽松导致代理后的请求又被代理自身捕获。解决方案是精确匹配API路径并在重写时确保不会产生循环。

相关文章:

前端开发避坑指南:用Node.js代理轻松解决本地联调跨域问题(附http-proxy-middleware配置)

前端联调实战:Node.js反向代理的工程化解决方案 跨域问题就像前端开发路上的减速带,每次联调都得颠簸几下。想象这样的场景:你正在本地调试一个电商网站,前端跑在localhost:8080,后端API服务在localhost:3000。每次点击…...

阴阳师自动化脚本:基于图像识别的智能任务调度解决方案

阴阳师自动化脚本:基于图像识别的智能任务调度解决方案 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 面对阴阳师游戏中繁复的日常任务,玩家常常需要投入…...

项目经理日常避坑指南:如何把PMP十大知识域真正用在实际项目里(附真实案例)

项目经理实战手册:PMP十大知识域在真实项目中的避坑技巧 刚拿到PMP证书那会儿,我天真地以为项目管理就是按图索骥——把十五至尊图往墙上一贴,五大过程组十大知识域往文档里一塞,项目就能自动跑起来。直到第一次独立负责百万级项…...

从无人机到卫星:实战中如何搞定大气校正?以ENVI/FLAASH工具为例

从无人机到卫星:实战中如何搞定大气校正?以ENVI/FLAASH工具为例 当你在清晨处理一幅刚接收的Sentinel-2影像时,是否曾被那层"蓝色薄雾"困扰?这种因大气散射导致的色彩失真,正是遥感数据分析中的头号难题。大…...

ChampR:英雄联盟智能助手,告别手动配置的繁琐

ChampR:英雄联盟智能助手,告别手动配置的繁琐 【免费下载链接】champr 🐶 Yet another League of Legends helper 项目地址: https://gitcode.com/gh_mirrors/ch/champr 还在为英雄联盟的出装和符文配置烦恼吗?每次版本更新…...

Midscene.js:基于视觉AI的跨平台UI自动化终极解决方案

Midscene.js:基于视觉AI的跨平台UI自动化终极解决方案 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene Midscene.js是一款革命性的AI驱动UI自动化工具…...

3种方式让你的低质量语音瞬间清晰:VoiceFixer语音修复实战手册

3种方式让你的低质量语音瞬间清晰:VoiceFixer语音修复实战手册 【免费下载链接】voicefixer General Speech Restoration 项目地址: https://gitcode.com/gh_mirrors/vo/voicefixer 你是否曾遇到过珍贵的录音被噪音淹没?或是历史语音档案因年代久…...

避坑指南:为什么你的16S数据在NCBI上传总失败?从Biosample到SRA的完整排错流程

16S数据上传NCBI全流程避坑手册:从Biosample到SRA的深度排错指南 当你完成16S测序数据分析后,将原始数据上传至NCBI是分享研究成果的关键一步。然而,许多研究者在这一过程中频频遭遇系统报错、状态异常或迟迟收不到确认邮件等问题。本文将系…...

终极指南:如何免费激活Beyond Compare 5专业版

终极指南:如何免费激活Beyond Compare 5专业版 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 还在为Beyond Compare 5的30天试用期限制而烦恼吗?今天我将为你揭秘一个完…...

【R语言偏见检测权威指南】:20年统计专家亲授LLM偏见量化建模与7类高频报错秒级定位法

更多请点击: https://intelliparadigm.com 第一章:R语言大语言模型偏见检测的统计学基础与范式演进 大语言模型(LLM)在R生态中正逐步融入社会科学研究与政策分析流程,其输出中的系统性偏见已不再仅是伦理议题&#xf…...

[笔记]WinDBG使用教程

参考: Windbg调试入门 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/calls-window 文章目录前言准备使用显示一个EPROCESS结构和域的格式查看PEB查看堆栈定位当前异常地址查看已载入的符号查看内存断点断点某个函数查看模块列表…...

【XBOX360】Xbox360 RGH3.0 刷机教程

Xbox360 RGH3.0 刷机教程 Xbox360 RGH3.0 介绍 RGH 3.0 是最新的Xbox360自制系统刷机固件,可以不需要安装脉冲芯片,使用Xbox360自带的南桥芯片,就可以让Xbox360完成刷机,运行自制系统,是国外大神15432开发出的最新的…...

MusicFree插件完全指南:打造你的终极跨平台音乐播放系统

MusicFree插件完全指南:打造你的终极跨平台音乐播放系统 【免费下载链接】MusicFreePlugins MusicFree播放插件 项目地址: https://gitcode.com/gh_mirrors/mu/MusicFreePlugins MusicFree插件系统是一款革命性的开源音乐播放解决方案,它通过创新…...

Qwen-Image-Edit-2509惊艳效果:编辑前后对比,细节保留完美无PS痕迹

Qwen-Image-Edit-2509惊艳效果:编辑前后对比,细节保留完美无PS痕迹 1. 专业级图像编辑的革命性突破 想象一下这样的场景:你拿到一张产品照片,需要把背景换成纯白色、调整产品颜色、添加促销标签,还要保持所有细节完美…...

Notepad++等高效文本编辑器技巧:管理Phi-3-vision模型项目配置文件

Notepad等高效文本编辑器技巧:管理Phi-3-vision模型项目配置文件 1. 为什么需要专业文本编辑器 在管理Phi-3-vision这类AI模型的配置文件时,YAML、JSON和环境变量文件往往包含大量嵌套结构和关键参数。普通记事本无法提供必要的功能支持,而…...

PHP+AI代码审计实战手册(2024 OWASP Top 10适配版)

更多请点击: https://intelliparadigm.com 第一章:PHPAI代码审计的范式变革与安全挑战 传统PHP代码审计长期依赖人工规则匹配与经验驱动,面对现代框架(如Laravel、Symfony)的动态路由、魔术方法和反射调用&#xff0c…...

python basedpyright

从Python开发者的角度看Pyright:一个被低估的类型检查工具 做Python开发这些年,类型检查这事儿一直挺有意思。早期大家觉得动态类型是Python的“优势”,后来随着代码规模增长,越来越多的人开始拥抱类型注解。而说到类型检查工具&a…...

4月30日多因子共振节点:鲍威尔“收官效应”与权力结构重塑的预期重构

摘要:本文通过事件驱动分析模型,结合货币政策路径预期框架、央行沟通机制演化模型与制度结构博弈分析,对4月30日美联储利率决议节点进行系统拆解,重点评估鲍威尔“最后一次发布会”、沃什提名推进及权力结构潜在变化对市场预期的影…...

Pixelle-Video深度评测:全自动AI短视频引擎的技术架构与多模态生成能力分析

Pixelle-Video深度评测:全自动AI短视频引擎的技术架构与多模态生成能力分析 【免费下载链接】Pixelle-Video 🚀 AI 全自动短视频引擎 | AI Fully Automated Short Video Engine 项目地址: https://gitcode.com/GitHub_Trending/pi/Pixelle-Video …...

机械设备钢材建材网站 网站模版

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 这款网站源码采用PHPMySQL/Sqlite的经典技术组合,两种技术的优势互补,为网站稳定运行提供坚实保障。PHP 语言具备开发效率高、跨平台性强的特点,能够快速实现各类功能需…...

dateparse在企业项目中的应用:日志解析、数据导入等实战案例

dateparse在企业项目中的应用:日志解析、数据导入等实战案例 【免费下载链接】dateparse GoLang Parse many date strings without knowing format in advance. 项目地址: https://gitcode.com/gh_mirrors/da/dateparse dateparse是一款功能强大的GoLang日期…...

基于SpringBoot的人事管理系统源码

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 基于SpringBoot的人事管理系统源码 含论文PPT,一套基于Springboot的人事管理系统,准确来说包含了Vue,本套资源含有论文和PPT,需要的小伙伴拿去吧 所需环境…...

Awesome Free Software与开源软件的区别:为什么自由软件更重要

Awesome Free Software与开源软件的区别:为什么自由软件更重要 【免费下载链接】awesome-free-software Curated list of open-source, free as in freedom software. 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-free-software 在数字时代&#x…...

dateparse CLI工具实战:命令行快速测试日期格式

dateparse CLI工具实战:命令行快速测试日期格式 【免费下载链接】dateparse GoLang Parse many date strings without knowing format in advance. 项目地址: https://gitcode.com/gh_mirrors/da/dateparse dateparse是一款强大的GoLang日期解析工具&#xf…...

FontCenter:告别AutoCAD字体缺失困扰的智能解决方案

FontCenter:告别AutoCAD字体缺失困扰的智能解决方案 【免费下载链接】FontCenter AutoCAD自动管理字体插件 项目地址: https://gitcode.com/gh_mirrors/fo/FontCenter 还在为每次打开AutoCAD图纸时出现的问号乱码而烦恼吗?FontCenter是一款完全免…...

告别重复劳动:用Pywinauto搞定Windows软件自动化(附记事本操作实战)

告别重复劳动:用Pywinauto搞定Windows软件自动化(附记事本操作实战) 每次打开电脑,总有一堆重复性工作等着你——数据录入、报表生成、软件测试...这些机械操作不仅耗时耗力,还容易出错。作为办公人员或初级开发者&…...

如何为Android电视和ChromeOS打造终极视频播放体验:VLC开源项目完全指南

如何为Android电视和ChromeOS打造终极视频播放体验:VLC开源项目完全指南 【免费下载链接】vlc-android VLC for Android, Android TV and ChromeOS 项目地址: https://gitcode.com/gh_mirrors/vl/vlc-android VLC for Android电视版和ChromeOS是专为大屏设备…...

详解C++中动态内存管理和泛型编程

一、C/C内存区域划分1. 栈又叫堆栈--非静态局部变量/函数参数/返回值等等,栈是向下增长的。2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。3. 堆用于程序运行时动态内存…...

LitCAD:零基础快速掌握免费开源CAD绘图的终极指南

LitCAD:零基础快速掌握免费开源CAD绘图的终极指南 【免费下载链接】LitCAD A very simple CAD developed by C#. 项目地址: https://gitcode.com/gh_mirrors/li/LitCAD LitCAD是一款基于C#开发的免费开源二维CAD绘图软件,专为CAD初学者和工程绘图…...

终极Win11系统优化指南:Win11Debloat深度解析与实战应用

终极Win11系统优化指南:Win11Debloat深度解析与实战应用 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …...