Vue中使用Proxy代理解决跨越问题-小坑记录

在日常开发中有很多解决跨域问题的办法,最常用的就是使用Proxy代理这种方式了,因为是本地开发配置起来十分方便。
今天呢就遇到一个非常不起眼的小坑,这里记录一下!
在我的vue.config.js内有以下配置:

module.exports = {
  publicPath: './',
  devServer: {
    proxy: {
      '/api': {
        target: 'http://10.10.18.21:7700',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      },
      '/api/unified-stats': {
        target: 'http://10.1.13.41:8080/unified-stats',
        changeOrigin: true,
        pathRewrite: {
          '^/api/unified-stats': ''
        }
      },
    }
  }
}

不难看出来我是将 /api 和 /api/unified-stats 代理到不同的服务地址(ps:先不要纠结为什么会有这么怪(重)异(复)的前缀api,哈哈哈);
可是我通过浏览器发送/api/unified-stats前缀的请求,接口却始终返回404。
其实这里问题就出在了第一个/api的配置上,代理没有按预期工作的原因就是代理匹配的顺序和规则导致的。
当我在尝试访问 /api/unified-stats 时,由于 /api 规则更通用且首先定义,它匹配了请求的 URL,因此 Vue CLI 使用这个规则来处理代理。即使 /api/unified-stats 规则也看似匹配,但由于匹配规则的顺序问题,它不会被使用。
最后调换一下顺序,修改成:

module.exports = {
  publicPath: './',
  devServer: {
    proxy: {
    '/api/unified-stats': {
        target: 'http://10.1.13.41:8080/unified-stats',
        changeOrigin: true,
        pathRewrite: {
          '^/api/unified-stats': ''
        }
      },
      '/api': {
        target: 'http://10.10.18.21:7700',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    }
  }
}

这样就可以匹配成功了!
小坑,就此记录一下!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容