​Vue 开发环境配置:使用 devServer.proxy 解决跨域问题​

​引言​

在现代 Web 开发中,前端和后端通常独立开发,前端运行在 http://localhost:8080,而后端可能运行在 http://localhost:8000 或其他端口。由于浏览器的 ​​同源策略(Same-Origin Policy)​​,直接请求不同源的 API 会导致 ​​跨域(CORS)错误​​。

Vue CLI 提供了 devServer.proxy 配置,可以在开发环境下轻松设置反向代理,让前端请求无缝转发到后端服务器,避免跨域问题。

本文将详细介绍如何在 vue.config.js 中配置代理,并提供实际案例和常见问题解决方案。


​1. 为什么需要配置代理?​

​跨域问题的产生​

  • 前端运行在 http://localhost:8080(Vue DevServer)。
  • 后端运行在 http://localhost:8000(如 Django、Spring Boot、Node.js)。
  • 浏览器限制跨域请求,导致 API 调用失败。

​解决方案​

  1. ​后端设置 CORS 头​​(如 Access-Control-Allow-Origin)。
  2. ​前端配置代理​​(推荐,开发阶段更方便)。

Vue CLI 的 devServer.proxy 可以:

  • 将 /api 请求转发到后端服务器。
  • 修改请求头,绕过浏览器限制。
  • 支持 WebSocket、HTTPS 等高级代理。

​2. 配置 vue.config.js 代理​

​基本代理配置​

// vue.config.js
module.exports = {devServer: {proxy: {// 代理所有以 `/api` 开头的请求'/api': {target: 'http://localhost:8000', // 后端服务器地址changeOrigin: true, // 修改请求头 HostpathRewrite: {'^/api': '', // 移除 `/api` 前缀},},},},
};
配置说明​
配置项说明
target后端服务器地址(如 http://localhost:8000)。
changeOrigin是否修改请求头 Host(通常设为 true)。
pathRewrite重写请求路径(如去掉 /api 前缀)。
ws是否代理 WebSocket(默认 true)。
secure是否验证 HTTPS 证书(默认 true)。

​3. 实际案例​

​(1) 代理单一 API 路径​

// vue.config.js
module.exports = {devServer: {proxy: {'/api': {target: 'http://localhost:8000',changeOrigin: true,},},},
};
  • 前端请求​​:http://localhost:8080/api/users
  • ​实际请求​​:http://localhost:8000/api/users

​(2) 代理多个后端服务​

// vue.config.js
module.exports = {devServer: {proxy: {'/api': {target: 'http://localhost:8000',changeOrigin: true,},'/auth': {target: 'http://localhost:8001',changeOrigin: true,},},},
};
  • /api → http://localhost:8000
  • /auth → http://localhost:8001

​(3) 重写路径(去掉前缀)​

// vue.config.js
module.exports = {devServer: {proxy: {'/api': {target: 'http://localhost:8000',changeOrigin: true,pathRewrite: {'^/api': '', // 去掉 `/api` 前缀},},},},
};
  • ​前端请求​​:http://localhost:8080/api/users
  • ​实际请求​​:http://localhost:8000/users/api 被移除)

​4. 常见问题​

​(1) 代理不生效​

✅ ​​检查步骤​​:

  1. target 是否正确​​:确保后端服务器正在运行。
  2. ​请求路径是否匹配​​:前端代码是否以 /api 开头。
  3. ​重启 DevServer​​:修改 vue.config.js 后需重启 npm run serve

​(2) 代理 WebSocket​

// vue.config.js
module.exports = {devServer: {proxy: {'/socket': {target: 'ws://localhost:8000',ws: true, // 启用 WebSocket 代理},},},
};

(3) 代理 HTTPS 接口​

// vue.config.js
module.exports = {devServer: {proxy: {'/api': {target: 'https://your-backend.com',secure: false, // 忽略 HTTPS 证书验证},},},
};

5. 完整配置示例​

// vue.config.js
module.exports = {devServer: {port: 8080, // 前端开发服务器端口open: true, // 启动后自动打开浏览器proxy: {// 代理 API 请求'/api': {target: 'http://localhost:8000',changeOrigin: true,pathRewrite: { '^/api': '' },},// 代理静态资源'/static': {target: 'http://localhost:8000',changeOrigin: true,},// 代理 WebSocket'/socket': {target: 'ws://localhost:8000',ws: true,},},},
};

6. 总结​

​场景​​配置方式​
​基本代理​proxy: { '/api': { target: '...' } }
​路径重写​pathRewrite: { '^/api': '' }
​多路径代理​配置多个 proxy 条目
​WebSocket​ws: true
​HTTPS​secure: false

通过 devServer.proxy,你可以轻松解决开发环境下的跨域问题,让前端请求无缝对接后端 API!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86611.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86611.shtml
英文地址,请注明出处:http://en.pswp.cn/web/86611.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM 中的 GC 算法演进之路!(Serial、CMS、G1 到 ZGC)

引言 想象一下,Java 程序运行就像在一个巨大的图书馆里借书还书。这个图书馆(JVM 的内存堆区)为了高效运转,需要一个聪明的“图书管理员”来清理失效的书籍(垃圾对象)。这,就是垃圾回收器&#…

(9)python+playwright自动化测试-页面(page)

1.简介 通过前边的讲解和学习,细心认真地你可能发现在Playwright中,没有Element这个概念,只有Page的概念,Page不仅仅指的是某个页面,例如页面间的跳转等,还包含了所有元素、事件的概念,所以我们…

《自动控制原理 》- 第 1 章 自动控制的基本原理与方式

1-1 自动控制的基本原理与方式 自动控制是指在没有人直接参与的情况下,利用外加的设备或装置,使机器、设备或生产过程的某个工作状态或参数按照预定的规律运行。自动控制的核心原理是反馈控制,即通过将系统的输出量回送到输入端,与…

DL00715-基于YOLOv11的水面漂浮物目标检测含数据集

【论文必备】基于YOLOv11的水面漂浮物目标检测——让你的研究走在科技前沿! 在环境监测、海洋保护和水质管理领域,水面漂浮物的检测一直是一个亟待解决的难题。传统的人工巡检方式不仅耗时费力,还无法覆盖广泛的水域范围。如今,基…

权电阻网络DAC实现电压输出型数模转换Multisim电路仿真——硬件工程师笔记

目录 1 基础知识 1.1 运算放大器在DAC中的作用 1.2 常见的基于运算放大器的DAC电路 1.2.1 倒T形电阻网络DAC 1.2.2 权电阻网络DAC 1.2.3 开关电容DAC 1.3 运算放大器的选择 1.4 设计注意事项 2 仿真实验 2.1 权电阻网络DAC实现数字0对应电压输出 2.2 权电阻网络DAC实…

Redis主从集群

✅ 一、什么是 Redis 主从集群? Redis 主从(Master-Slave)集群是一种最基础的集群方式: 一台 Redis 作为主节点(Master),负责写操作; 一到多台 Redis 作为从节点(Slave&…

【水印论文阅读1】将水印规则的定义域从离散的符号空间转移到连续的语义空间

【水印论文阅读1】将水印规则的定义域从离散的符号空间转移到连续的语义空间 写在最前面**为什么“token序列空间”有根本缺陷?****为什么“语义向量空间”能破局?****1. 连续性(抗攻击的核心)****2. 高维复杂性(防破解…

Glide缓存机制

一、缓存层级与设计目标 双级缓存: 内存缓存:弱引用 LruCache 磁盘缓存:DiskLruCache 设计目标: 减少网络流量消耗 避免Bitmap频繁创建/销毁引发的GC 提升图片加载速度 二、内存缓存机制 1. 双缓存结构 缓存类型存储对象…

BaiduSitemap - Typecho站点地图生成与多搜索引擎推送插件

文章目录 🌐 BaiduSitemap - Typecho站点地图生成与多搜索引擎推送插件✨ 功能特点🧩 插件架构核心模块文件结构📦 安装方法方法一:手动安装方法二:Git克隆⚙️ 配置说明站点地图基本设置搜索引擎配置百度搜索引擎必应(Bing)搜索引擎谷歌(Google)搜索引擎🚀 使用…

androidx中<layout>根布局的意义及用法

在 Android 开发中,<layout> 根布局是 Android Jetpack Data Binding 库的核心组件,用于声明该 XML 布局文件将使用数据绑定功能。以下是详细说明: 📌 一、基本作用 1. 启用数据绑定 <layout> 标签标志着此布局文件支持数据绑定,编译器会为其生成对应的绑定类…

QTreeWidget 简单使用

效果图&#xff1a; 关键代码&#xff1a; void MainProj::_InitTree() { connect(m_pTreeWidget, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(TreeItemClicked(QTreeWidgetItem*, int))); m_pTreeWidget->header()->setHidden(1); /*QTreeWid…

手势-handpose的pipeline介绍

手势-handpose的pipeline包括&#xff1a; 1、手部检测算法&#xff1a;单帧检测出左右手的边界框。 2、手部跟踪算法&#xff1a;连续帧跟踪&#xff0c;锁定左右手跟踪目标&#xff0c;作为后续的手部ui操作。 3、手部关键点检测算法&#xff1a;基于单帧的检测框图像作为输…

计算机操作系统(十七)内存管理

计算机操作系统&#xff08;十七&#xff09;内存管理 前言一、内存的使用与程序重定位&#xff08;一&#xff09;内存是什么&#xff1f;&#xff08;二&#xff09;程序的重定位过程&#xff08;三&#xff09;总结&#xff1a;内存使用的核心问题 二、连续分区管理&#xf…

【编译原理】期末

单选题 (4分) 令文法G[E]为&#xff1a;E->ET | T T->T*F | F F-> (E) | i 句型 F*iT 的最左素短语是&#xff08; &#xff09; A.F B.i C.T D.F*i B 短语&#xff1a; F*iT、F*i、F、i 素短语&#xff1a; i 最左素短语&#xff1a; i 单选题 (4分) 若在…

一个简单测试Deepseek吞吐量的脚本,国内环境可跑

一个简单测试Deepseek吞吐量的脚本,这里用DeepSeek-R1-Distill-Qwen-32B ,支持单卡4090 24G可跑,具体看你的硬件情况做调整,理论支持所有的模型,看你需要,可以修改模型名称,重点是pip使用国内的源,模型下载用阿里的ModelScope,无障碍下载,使用. 最后可以生成一个txt与html报表.…

前端基础知识JavaScript系列 - 19(正则表达式)

一、是什么 正则表达式是一种用来匹配字符串的强有力的武器 它的设计思想是用一种描述性的语言定义一个规则&#xff0c;凡是符合规则的字符串&#xff0c;我们就认为它“匹配”了&#xff0c;否则&#xff0c;该字符串就是不合法的 在 JavaScript中&#xff0c;正则表达式也…

Java锁机制知识点

一、锁的基础概念 1.1 什么是锁 在并发编程中&#xff0c;锁是用于控制多个线程对共享资源进行访问的机制。锁可以保证在同一时刻最多只有一个线程访问共享资源&#xff0c;从而保证数据的一致性。 1.2 锁的分类 可重入锁 vs 不可重入锁&#xff1a;可重入锁允许同一个线程…

2025下半年软考软件设计师(中级)怎么高效备考,目标是稳过线!

25下半年软考开始进入备考阶段&#xff0c;现在咱们就抛开那些文绉绉的官话&#xff0c;用大白话来聊聊2025下半年软考软件设计师&#xff08;中级&#xff09;怎么高效备考&#xff0c;目标是稳过线&#xff01; 核心思想&#xff1a;抓大放小&#xff0c;真题为王&#xff0…

Jupyter常见操作(持续更新)

Jupyter常见操作&#xff08;持续更新&#xff09; 本文主要整理一些常见的或者比较简单的Jupyter操作&#xff0c;尽量保证一次性整理出来&#xff0c;方便需要但是忘记的情况下可以直接查&#xff0c;希望能当字典。 1.查看Jupyter内核 jupyter kernelspec list 2.使用指定…

连点成画面积计算算法

连点成画面积计算算法 问题分析与算法设计 1. 问题特征分析 闭合多边形(起点和终点相同)线段可能交叉形成复杂形状需要处理自交多边形可能有多个内部空洞点数较多(≥50个点),需要高效算法2. 解决方案选择 采用平面扫描算法结合多边形布尔运算来准确计算最外层边界包围的…