Vue3.x 中 vue.config 配置 Webpack-dev-server的proxy 实现代理跨域

2023-11-09

前言

  1. 如果你有单独的后端开发服务器 API,并且希望在同域名下发送 API 请求 ,那么代理某些 URL 会很有用。
  2. 解决开发环境的跨域问题(不用在去配置nginx和host, 爽歪歪~~)

webpack.config.js中配置

下面简单介绍一下五个经常使用的场景

使用一:

 
  1. module.exports = {
    
    //...
    
    devServer: {
    
    proxy: {
    
    '/api': 'http://localhost:3000'
    
    }
    
    }
    
    };

请求到 /api/xxx 现在会被代理到请求 http://localhost:3000/api/xxx, 例如 /api/user 现在会被代理到请求 http://localhost:3000/api/user

使用二

如果你想要代码多个路径代理到同一个target下, 你可以使用由一个或多个「具有 context 属性的对象」构成的数组:

 

module.exports = {

//...

devServer: {

proxy: [{

context: ['/auth', '/api'],

target: 'http://localhost:3000',

}]

}

};

使用三:

如果你不想始终传递 /api ,则需要重写路径:

 
  1. module.exports = {
    
    //...
    
    devServer: {
    
    proxy: {
    
    '/api': {
    
    target: 'http://localhost:3000',
    
    pathRewrite: {'^/api' : ''}
    
    }
    
    }
    
    }
    
    };

请求到 /api/xxx 现在会被代理到请求 http://localhost:3000/xxx, 例如 /api/user 现在会被代理到请求 http://localhost:3000/user

使用四:

默认情况下,不接受运行在 HTTPS 上,且使用了无效证书的后端服务器。如果你想要接受,只要设置 secure: false 就行。修改配置如下:

 
  1. module.exports = {
    
    //...
    
    devServer: {
    
    proxy: {
    
    '/api': {
    
    target: 'https://other-server.example.com',
    
    secure: false
    
    }
    
    }
    
    }
    
    };

使用五:

有时你不想代理所有的请求。可以基于一个函数的返回值绕过代理。
在函数中你可以访问请求体、响应体和代理选项。必须返回 false 或路径,来跳过代理请求。

例如:对于浏览器请求,你想要提供一个 HTML 页面,但是对于 API 请求则保持代理。你可以这样做:

 
  1. module.exports = {
    
    //...
    
    devServer: {
    
    proxy: {
    
    '/api': {
    
    target: 'http://localhost:3000',
    
    bypass: function(req, res, proxyOptions) {
    
    if (req.headers.accept.indexOf('html') !== -1) {
    
    console.log('Skipping proxy for browser request.');
    
    return '/index.html';
    
    }
    
    }
    
    }
    
    }
    
    }
    
    };

解决跨域原理

上面的参数列表中有一个changeOrigin参数, 是一个布尔值, 设置为true, 本地就会虚拟一个服务器接收你的请求并代你发送该请求,

 
  1. module.exports = {
    
    //...
    
    devServer: {
    
    proxy: {
    
    '/api': {
    
    target: 'http://localhost:3000',
    
    changeOrigin: true, //允许跨域
    
    }
    
    }
    
    }
    
    };

vue-cli中proxyTable配置接口地址代理示例

修改 config/index.js

 
  1. module.exports = {
    
    dev: {
    
    // 静态资源文件夹
    
    assetsSubDirectory: 'static',
    
    // 发布路径
    
    assetsPublicPath: '/',
    
    
    // 代理配置表,在这里可以配置特定的请求代理到对应的API接口
    
    // 使用方法:https://vuejs-templates.github.io/webpack/proxy.html
    
    proxyTable: {
    
    // 例如将'localhost:8080/api/xxx'代理到'https://wangyaxing.cn/api/xxx'
    
    '/api': {
    
    target: 'https://wangyaxing.cn', // 接口的域名
    
    secure: false, // 如果是https接口,需要配置这个参数
    
    changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
    
    },
    
    // 例如将'localhost:8080/img/xxx'代理到'https://cdn.wangyaxing.cn/xxx'
    
    '/img': {
    
    target: 'https://cdn.wangyaxing.cn', // 接口的域名
    
    secure: false, // 如果是https接口,需要配置这个参数
    
    changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
    
    pathRewrite: {'^/img': ''} // pathRewrite 来重写地址,将前缀 '/api' 转为 '/'。
    
    }
    
    },
    
    // Various Dev Server settings
    
    host: 'localhost', // can be overwritten by process.env.HOST
    
    port: 4200, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
    
    }

更多参数

dev-server 使用了非常强大的 http-proxy-middleware

 
  1. target:要使用url模块解析的url字符串
    
    forward:要使用url模块解析的url字符串
    
    agent:要传递给http(s).request的对象(请参阅Node的https代理和http代理对象)
    
    ssl:要传递给https.createServer()的对象
    
    ws:true / false,是否代理websockets
    
    xfwd:true / false,添加x-forward标头
    
    secure:true / false,是否验证SSL Certs
    
    toProxy:true / false,传递绝对URL作为路径(对代理代理很有用)
    
    prependPath:true / false,默认值:true - 指定是否要将目标的路径添加到代理路径
    
    ignorePath:true / false,默认值:false - 指定是否要忽略传入请求的代理路径(注意:如果需要,您必须附加/手动)。
    
    localAddress:要为传出连接绑定的本地接口字符串
    
    changeOrigin:true / false,默认值:false - 将主机标头的原点更改为目标URL

载自 funnycoderstar

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue3.x 中 vue.config 配置 Webpack-dev-server的proxy 实现代理跨域 的相关文章

  • 如何保存 Tensorflow.js 模型?

    我想制作一个创建 保存和训练 tensorflow js 模型的用户界面 但我无法在创建模型后保存模型 我什至从tensorflow js文档复制了这段代码 但它不起作用 const model tf sequential layers t
  • 为什么“true && () => {}”会产生“Uncaught SyntaxError:格式错误的箭头函数参数列表”? [复制]

    这个问题在这里已经有答案了 下面的代码 执行时 true gt yields Uncaught SyntaxError Malformed arrow function parameter list Why 编辑 我知道将函数包装在括号中是
  • react-dom/server 可以在客户端工作吗?

    我需要在客户端呈现顶级 html 标签 例如 结果将被注入到 iframe 中 在服务器上 我会使用renderToStaticMarkup函数来自react dom server 但仅限客户端react dom没有这个功能 Will re
  • 在移动浏览器或 PhoneGap 应用程序之间进行检测

    是否可以使用 JavaScript 检测用户是否通过浏览器或应用程序进行访问 我正在通过网页和 PhoneGap 应用程序开发适用于多个移动操作系统的混合应用程序 目标是 独立于部署目标使用相同的代码 仅当用户代理是应用程序时添加 Phon
  • 通过单击堆叠条形图打开选项卡

    我正在使用 R 构建一个包含转发的堆积条形图 ggplot and plotly 如果单击条形图的一部分 我希望打开一个新的浏览器选项卡并显示该特定日期的推文以及指定的转发量 但是 当我单击下面示例中的其中一个栏时 会打开一个不同的链接 表
  • 在 JavaScript 中解析日期时间字符串

    有谁知道如何解析所需格式的日期字符串dd mm yyyy See Mozilla Core JavaScript 参考 日期对象 https developer mozilla org en Core JavaScript 1 5 Refe
  • 在生产中使用 css / javascript 源映射对性能有何影响?

    生产环境中应该使用源映射吗 除了调试之外 它们还有什么好处吗 由于额外的服务器往返 它们是否会影响应用程序加载时间 浏览器是否足够智能来加载 map应用程序加载和渲染后的资产 如果浏览器找不到 map asset 404错误 会对性能产生影
  • JavaScript 中的 ParseFloat 函数

    当我添加两个文本框值时1 001 and 0 001然后我做了一个parseFloat I get 1 0019999999 我要它1 002 你能帮助我吗 JavaScriptNumber http www w3schools com j
  • javascript中.match和.test有什么区别[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 在浏览 JavaScript 时 我刚刚遇到了 match test 和 exec有什么不同 这是最快的 首先 exec and test
  • YouTube - 右键单击​​时不显示上下文菜单

    想法 通过使用右键拖放到视频播放器上来查找 YouTube 视频 例如 每 2 屏幕宽度 1 秒 因此 在 1920x1080 的屏幕上 如果我按下鼠标右键 将其向左拖动 384 像素 20 然后松开 视频应该快退 10 秒 我有一个 Gr
  • 在 forEach() 中使用 `this` [重复]

    这个问题在这里已经有答案了 免责声明 我正在学习 JavaScript 我有一个像这样的对象构造函数 var Palette function this colors red green blue this getColorCombinat
  • 如何按日期升序对对象进行排序?

    如果我有一个对象列表 var objectList LIST OF OBJECT each object列表中包含三个属性 name date gender 如何按 对列表中的对象进行排序date 属性升序 the date 属性包含字符串
  • 为什么 Number.isNaN() 对字符串返回 false?

    据我的理解NaN代表Not A Number Strings不是绝对的Numbers因此我希望下面的代码返回true对于字符串 然而 事实并非如此 console log Number isNaN Stack Overflow 有人可以澄清
  • d3 序数尺度的映射

    我正在使用 D3 的序数比例将数字映射到颜色 我用过这个 color d3 scale ordinal range 1f77b4 ff7f0e 2ca02c d62728 9467bd 8c564b e377c2 domain 0 6 co
  • 输入号码时自动格式化 SSN

    我有一个文本字段 用户输入 SSN 号码 输入自身时 它应该格式化 就像关于文本字段的更改 它应该格式化999 999 999以这种方式在显示器本身上 kottenator 的脚本几乎已经完成 但它每隔 3 位数字就中断该值 而不是 3 位
  • bootstrap-datetimepicker 仅显示日期

    我正在用这个repo https github com smalot bootstrap datetimepicker由 smalot 提供 我只想选择并显示日期 对于其他一些地方 我显示数据和时间 因此选择此存储库 我可以设法仅使用它来选
  • queue.js 是如何工作的?

    我一直试图理解如何Mike Bostock 的queue js https github com mbostock queue blob master queue js有效 但我看不出它是如何工作的 我不明白的部分是代码如何设法继续执行回调
  • 如何使 CSS 动画/过渡以固定速度而不是固定持续时间播放? [复制]

    这个问题在这里已经有答案了 我有一个 CSS 动画 可以使元素沿直线移动未定义的距离 据我所知 动画具有固定的持续时间 因此无论元素必须移动多远 动画始终需要相同的时间来运行 我该如何制作才能使动画没有固定的duration 但有固定的运动
  • ExtJS:简单表单忽略 formBind

    我有一个小问题让我发疯了好几天 我有一个表单面板 Ext define EC view PasswordPanel extend Ext form Panel alias widget pwdpanel bodyPadding 15 ini
  • 如何选中表格中输入文本焦点上的复选框

    我试图在输入文本焦点上检查表 DOM 中的复选框 但无法访问复选框元素 但我的焦点正在工作 这是我的 jsfiddle 链接https jsfiddle net 9qha9vft https jsfiddle net 9qha9vft 这是

随机推荐

  • 一文理解推挽输出&漏极开路输出(OD)&集电极开路输出(OC)

    因为自己之前一直不理解推挽输出 漏极开路输出 集电极开路输出这三个概念到底是什么意思 今天终于静下心来好好学习了一遍 于是便写下本文详细解释一下这三个概念 希望能对你有所帮助 文中大部分内容均为引用 要理解推挽输出 首先要理解好三极管 晶体
  • Android studio 查看文件svn/本地历史

    在AS中打开目标文件 而后选中右键本地历史 Local History gt Show History svn历史 Subversion gt Show History
  • 开源资产管理系统

    真正的大师 永远都怀着一颗学徒的心 一 项目简介 今天给大家推荐一个开源的资产管理系统 对于一个公司而言 对资产的记录是一件很重要的事情 短时间你可能知道一个电脑 一个打印机放在什么地方 但是随着时间的推移 对于一个公司老人来说你都很难找到
  • 用node.js 实现一个简单的接口

    使用 Node js 可以方便地创建简单的接口 下面是一个使用 Node js 和 Express 框架创建简单接口的示例 首先 确保已经安装了 Node js 和 npm Node js 包管理器 1 创建一个新的文件夹 并在文件夹中打开
  • 华为od机试 C++ 地址分割

    题目 你的任务是编写一个程序 该程序将接收一个由逗号分隔的字符串 其中包含一个URL的前缀和后缀 然后将它们合并成一个完整的URL 合并规则如下 如果前缀的最后一个字符是斜杠 则删除它 如果后缀的第一个字符是斜杠 则删除它 在处理过的前缀和
  • 很诡异的问题——Jenkins与svn代码冲突之解决方法

    今天遇到一个很诡异的问题 可能是我刚刚接触jenkins的原因 导致这个问题困扰了我半个小时 不管怎么样 我还是记录下来 希望能帮助到那些和我一样刚刚接触jenkins的小伙伴 我从idea修改了两个配置文件 提交到svn 然后jenkin
  • mac上安装brew(最简易)

    我们使用linux下有yum mac相应的是brew 安装软件 brew的安装目录在 usr local Cellar 我们以安装nodejs为例子 只需要执行 brew install nodejs 就安装完了 就这么简单 接下来我们安装
  • java开源 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城 小程序商城搭建

    1 涉及平台 平台管理 商家端 PC端 手机端 买家平台 H5 公众号 小程序 APP端 IOS Android 微服务平台 业务服务 2 核心架构 Spring Cloud Spring Boot Mybatis Redis 3 前端框架
  • M1 电脑使用nvm 管理node

    1 执行下面的代码创建文件 bash profile touch bash profile 2 下载安装 curl o https raw githubusercontent com nvm sh nvm v0 35 2 install s
  • 从零开始的Docker详解(六)

    Docker仓库 docker仓库是集中存放镜像的地方 类似maven的仓库集中存放依赖 Docker Hub Docker Hub是由Docker官方维护的公共仓库 包含官方镜像和个人上传的镜像 大部分镜像都可以在上面找到 注 非官方的镜
  • CentOS7.3 安装

    选择Install CentOS Linux 7 选择语言 点击软件选择 选择基本环境 点击安装位置 选择我要配置分区 点击完成 根据需要选择分区方案 点击 根据需要添加挂载点 添加完所有挂载点后点击完成 在弹出的页面中选择接受更改 点击开
  • java基础知识点

    java中有四大修饰符 分别为private default protected public 下面主要是四者之间的区别 private 私有的 private可以修饰成员变量 成员方法 构造方法 不能修饰类 此刻指的是外部类 内部类不加以
  • 【mybatis-plus】学习笔记

    官方地址 https mp baomidou com 自动化工具 JPA tk imapper MybatisPlus 简介 MyBatis Plus 简称 MP 是一个 MyBatis 的增强工具 在 MyBatis 的基础上只做增强不做
  • 将Android项目打包成Library

    最近在弄一个SDK 考虑把项目做成 Library 类库的形式 方便调用 顺便在此分享给大家 首先 先创建一个普通的android项目 这个项目可以起任何你想要的名称 想要的包名等 步骤如下 在Package Explorer中 鼠标右键项
  • .NET Word模板引擎--MiniWord,继MiniExcel后又一开源作品

    目录 Part1简介 Part2特点 Part3安装 Part4使用 文本生成 图片生成 列表生成 表格生成 Part5总结 Part1简介 MiniWord 是 NET Word模板引擎 由Word模板和数据 简单 快速生成文件 Part
  • 启动模式,BOOT0和BOOT1详解

    原文链接 http blog csdn net daunxx article details 40148945 在画STM32的电路图的时候 关于STM32的启动方式纠结了一下 现有的参考设计都是在STM32的启动选择引脚BOOT0和BOO
  • 通过Java构建树形结构

    通过Java构建树形结构所需要的数据 实体类Test 主键 private String id 父类ID private String parentId 子节点 private List
  • matplotlib - 确保 0 在 RdBu 颜色条中变为白色

    matplotlib 确保 0 在 RdBu 颜色条中变为白色 matplotlib 确保 0 在 RdBu 颜色条中变为白色 IT工具网 标签 matplotlib colormap 我使用以下代码段创建了一个热图 span style
  • 丢手帕问题

    package Task author 链表解决丢手帕问题 约瑟夫问题 public class CycLink public static void main String args CycLinkModel cycLink new Cy
  • Vue3.x 中 vue.config 配置 Webpack-dev-server的proxy 实现代理跨域

    前言 如果你有单独的后端开发服务器 API 并且希望在同域名下发送 API 请求 那么代理某些 URL 会很有用 解决开发环境的跨域问题 不用在去配置nginx和host 爽歪歪 在webpack config js中配置 下面简单介绍一下