使用带有多路径代理匹配的angular-cli

时间:2017-06-12 07:47:05

标签: angular angular-cli webpack-dev-server http-proxy-middleware

如何在proxy.conf.json中定义多个代理路径? github上的angular-cli proxy documentation看起来只能有一条路径(/ api):

{
  "/api": {
    "target": "http://localhost:3000",
    "secure": false
  }
}

但是当我查看webpack proxyhttp-proxy-middleware文档时,我发现应该可以定义多个路径(/ api-v1和/ api-v2):

// Multiple entry
proxy: [
  {
    context: ['/api-v1/**', '/api-v2/**'],
    target: 'https://other-server.example.com',
    secure: false
  }
]

但我不明白我怎么能把它变成proxy.conf.json。

3 个答案:

答案 0 :(得分:3)

在proxy.conf.json中使用以下语法:

[
  {
    "context": ["/api-v1/**", "/api-v2/**"],
    "target": "https://other-server.example.com",
    "secure": false
  }
]

实际的语法如下:

[
    {
        "context": [
            "/api",
            "/other-uri"
        ],
        "target": "http://localhost:8080",
        "secure": false
    }
]

答案 1 :(得分:2)

此处记录了多个条目的语法(使用上下文): https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md#multiple-entries

const PROXY_CONFIG = [
    {
        context: [
            "/my",
            "/many",
            "/endpoints",
            "/i",
            "/need",
            "/to",
            "/proxy"
        ],
        target: "http://localhost:3000",
        secure: false
    }
]

module.exports = PROXY_CONFIG;

这还要求您重命名您的配置从 .json .js ,并将您的运行命令指向新文件。

对我来说,上下文语法并不常用(我假设因为我想使用通配符)。所以我提出了以下解决方案,它允许您生成配置:

module.exports = [
  "/my",
  "/many",
  "/endpoints",
  "/i",
  "/need",
  "/to",
  "/proxy",
  "/folder/*"
].reduce(function (config, src) {
  config[src] = {
    "target": "http://localhost:3000",
    "secure": false
  };
  return config;
}, {});

这让我完成了工作。 (请注意,这仍然需要将proxy.conf.json重命名为proxy.conf.js并编辑运行命令以指向重命名的文件)

答案 2 :(得分:0)

截至 2021 年 3 月,答案如下:

  1. 在 CLI 配置文件 angular.json 中,添加/修改代理文件:

    ...
    "architect": {
      "serve": {
        "builder": "@angular-devkit/build-angular:dev-server",
        "options": {
          "browserTarget": "your-application-name:build",
          "proxyConfig": "src/proxy.conf.js"
        },
    ...
    
  2. 创建一个 proxy.conf.js,例如:

    const PROXY_CONFIG = [
        {
            context: [
                "/my",
                "/many",
                "/endpoints",
                "/i",
                "/need",
                "/to",
                "/proxy"
            ],
            target: "http://localhost:3000",
            secure: false
        }
    ]
    module.exports = PROXY_CONFIG;
    

注意它是 .js,而不是 .json。

Official Details