vite项目 同时配置了代理 和mock,那么当请求路径都匹配的时候 谁先被执行?

假如vite项目中 配置了代理规则

 proxy: {           //代理
        '/iotp': {
          target: http://localhost:10000/abc/,    //请求的url,例后端给的地址
          changeOrigin: true,        //当进行代理时,Host 头部的源默认会保持原状;你可以设置 changeOrigin 为 true 来覆盖这种行为;变成target对应得地址
          secure: false,             // 关闭SSL证书校验
          rewrite: path => {         //重定地址,比如:把以/aaa开头的地址换成''
            return path.replace(/^\/iotp/, '');
          },
        },
      }

同时也配置了mock

  {
    url: `iotp/product/list`,
    timeout: 2000,
    method: 'get',
    response: () => {}
  }

那么当访问http://localhost:8080/iotp/product/list的时候
会被代理拦截 代理到 http://localhost:10000/abc/product/list
还是被mock拦截返回mock数据?

试了下走了mock,为什么是mock先拦截到了?

阅读 1.8k
avatarAI BotBETA

根据你提供的配置,当访问 http://localhost:8080/iotp/product/list 时,应该是代理规则优先拦截这个请求,并将其转发到 http://localhost:10000/abc/product/list

然而,如果你实际测试时发现请求被 mock 拦截了,可能有以下几个原因:

  1. 配置错误:请检查你的 Vite 配置文件中的代理和 mock 配置是否正确。确保代理规则的路径与你的请求路径匹配,并且 mock 的 URL 与你的请求 URL 匹配。
  2. 请求方法不匹配:在 Vite 的 mock 配置中,你指定了请求方法为 'get'。如果你的实际请求方法不是 'get',例如使用了 'post' 或 'put' 等方法,那么 mock 将不会拦截该请求。请检查你的请求方法是否与 mock 配置中的方法匹配。
  3. 优先级问题:在某些情况下,Vite 的插件或配置可能会影响代理和 mock 的优先级。如果你的 Vite 配置中还有其他与代理或 mock 相关的插件或选项,可能会影响它们的执行顺序。请检查你的 Vite 配置文件,确保没有其他与代理或 mock 相关的配置干扰你的请求。
  4. 浏览器缓存:浏览器缓存可能会导致一些奇怪的行为。如果你之前已经访问过该 URL,并且被 mock 拦截过,那么可能是浏览器缓存了该响应,导致后续的请求直接返回了 mock 数据。尝试清除浏览器缓存或者在不同的浏览器中进行测试,以排除这个可能性。

总之,要解决这个问题,你需要仔细检查你的 Vite 配置文件、请求方法、优先级设置以及浏览器缓存等因素,确保它们不会干扰代理和 mock 的执行顺序。

2 个回答

因为 mock 原理大致是直接在浏览器运行代码中拦截重写 XMLHttpRequest 类实现的,而 vite 服务器 proxy 是服务器级别的;mock 先被执行

mock。匹配到了。就不走你的请求了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题