devServer.proxy不生效问题解决

本文详细解释了WebpackdevServer中proxy配置不生效的问题,包括常见原因(配置错误、路径未匹配、axiosbaseURL设置错误),并指导如何正确使用pathRewrite进行路径重写以确保代理生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

devServer.proxy不生效问题解决

1、proxy 配置解析

devServer: {
    https: true, // 开启https模式
    // 配置服务器代理
    proxy: {
      '/api': { // 匹配访问路径中含有 '/api' 的路径
        target: 'http://localhost:3000/', // 测试地址、目标地址
        changeOrigin: true,
        ws: true, // 是否开启 webSocket 代理
        pathRewrite: { // 请求路径重写
          '^/api': '',   //重写请求路径
        },
      }
    }
  },

2、不生效原因分析
原因一、配置写错了
原因二、路径没有匹配上
解决方法:按照上述proxy 配置确认、解析仔细检查(建议直接复制
原因三、在自己封装的http.js中将axios.defaults.baseURL设置为了如下

axios.defaults.baseURL = 'http://localhost:3000'

导致无法匹配.
解决方法:proxy方式是给我们开发环境用的 ,其次是我们的请求要被开发服务器接收到,且不能匹配到请求,然后我们的请求就会被代理到配置的URL。由于写了一个URL,导致代理不会生效。
注释掉,或者改为本地路径。如下

let baseURL = "/";
if (process.env.NODE_ENV === 'production') {
  baseURL = 'http://localhost:3000/';
}
const http = axios.create({
  baseURL,
})

这样在开发环境下我们的 baseURL = “/”, 代理就可以生效了
3、pathRewrite说明

pathRewrite: { // 请求路径重写
    '^/api': '',   //重写请求路径
 },

pathRewrite的key值 ^/api 就是一个正则表达式。
pathRewrite的value值 ‘ ’为替换后的路径。
意思就是将匹配成功的地址当做一个字符串,然后执行 js 的 replace 方法,将执行成功的最终结果作为最后的请求路径。
比如:
我们有一个请求 axios.get(“/api/aa/bb/cc”) ;
根据我们这里配置的 proxy, 带有 /api 的请求路径就需要进行代理,且 /api/aa/bb/cc 路径中含有 /api ,所以该请求就需要代理。
将路径当做字符串执行, “/api/aa/bb/cc”.replace(/^/api/, “”)
执行结果: /aa/bb/cc
最终的请求路径变成了 http://localhost:3000/aa/bb/cc 不含/api;
又比如说我们的配置为

pathRewrite: { // 请求路径重写
    '^/api': '/epui',   //重写请求路径
 }

那么我们的请求 axios.get(“/api/aa/bb/cc”) ;
会执行 “/api/aa/bb/cc”.replace(/^/api/, “/epui”);
最终的请求路径变成了 http://localhost:3000/epui/aa/bb/cc;
将 /epui 替换了开头的/api。

示例
在这里插入图片描述
在这里插入图片描述

扩展

vue中proxy代理配置(测试一)
vue中proxy代理配置(测试二)

Vue.jsDevServer 配置中的 `proxy` 功能用于代理请求到其他服务器,当你的前端应用需要访问后端 API 而不想直接暴露真实地址给开发者时非常有用。然而,有时候你可能会遇到代理设置不生效的情况,可能有以下几个原因: 1. **配置错误**:检查你的 `.vue.config.js` 或者 `scripts/dev-server.js` 文件中的 `devServer.proxy` 对象是否配置正确。确保目标 URL、路径替换和安全选项(如 `https`, `pathRewrite`等)都配置到位。 ```javascript // .vue.config.js module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:8080', // 后端API实际运行的地址 changeOrigin: true, pathRewrite: { '^/api': '' }, // 如果有重写前缀,去掉它 }, }, }, }; ``` 2. **跨域问题**:如果目标服务器设置了 CORS(跨源资源共享),你需要确认跨域策略是否允许来自 Vue 开发服务器的请求。 3. **重启服务**:有时候修改配置文件后需要重启开发服务器才会生效,尝试运行 `npm run serve` (或者 `yarn serve`) 来启动。 4. **网络问题**:确保本地网络连接正常,并且防火墙没有阻止对目标地址的访问。 5. **环境变量覆盖**:如果你在命令行指定了特定的代理,比如 `--proxy-config=custom-config.json`,那么 `proxy` 配置可能不会自动加载。 解决上述问题后,如果代理仍然未生效,你可以尝试清除浏览器缓存,然后重新访问受影响的API链接。如果还有疑问,可以提供具体的报错信息以便于诊断
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

k0933

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值