首页 > 解决方案 > 带有特定查询参数的后端匹配 API 路径的 Angular 代理

问题描述

我正在尝试使用特定查询参数代理对 API 的后端调用。说,API 路径是/path/to/api?param1=foo&param2=bar,我只需要代理请求param2=bar。在没有或使用任何查询参数的情况下代理调用/path/to/api很容易,而不是我的情况。

我开始从官方文档中挖掘,但它只包含基本示例。然后我找到了这篇文章,据说我可以使用自定义匹配器功能,但根据这个评论它在 Angular 中不受支持。然后我访问了webpack 文档,发现自定义匹配器可能会传递给代理配置上下文属性。不过,我不知道如何在 Angular 代理配置中使用它,因为它有另一个模式。这篇文章似乎有最接近的提示来构建我需要的路径,我尝试了不同的选项,尽管它们都没有真正奏效。我发现路径使用微匹配glob格式,但这些知识对我也没有帮助。我还找到了类似问题的答案,并使用了建议的正则表达式,使其适应我的情况,但再次没有运气。

// ...
"**/path/to/api?*param2=bar*": {
  "target": "https://localhost:4200",
  "secure": false,
  "pathRewrite": () => "/mocks/api.mock.json"
},
// ...

这是我尝试过的众多方法之一,它不代理所需的请求。

标签: angularproxy

解决方案


尝试使用pathRewrite回调来检索有关 url 路径的信息。

例子:

"**/v1/myApi": {
  "pathRewrite": (path) => {
      if (path.includes('param=bar')) {
          return "/mocks/response1.mock.json";
      }
      return "/mocks/response2.mock.json";
  }
}

推荐阅读