【问题标题】:Proxying Angular 7 app to backend endpoint running on different port将 Angular 7 应用程序代理到在不同端口上运行的后端端点
【发布时间】:2019-04-11 19:17:08
【问题描述】:

我正在尝试设置一个后端代理,以便在端口 4200 上运行的客户端应用程序上完成的所有请求都被重写到端口 80。

当我运行请求时:

  getTranslation(lang: string): Observable<any> {
    return this.http.get(`/translate?language=${lang}`)
    .pipe(map(response => response));
  }

它应该点击 localhost:80/translate?language="en" 但它却点击 localhost:4200/translate?language="en"。

我尝试通过 angular.json 添加 proxy.conf.json 进行设置:

"serve": {
  "builder": "@angular-devkit/build-angular:dev-server",
  "options": {
    "browserTarget": "client-app:build",
    "proxyConfig": "proxy.conf.json"
  },

看起来像这样:

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

但这不起作用。我已经读过它在 Angular 7 中做了一些不同的事情,你通过 ng serve 像这样传递代理:

"docker-start": "ng serve --host 0.0.0.0 --port 4200 --proxy-config proxy.js"

proxy.js 文件为:

var HttpsProxyAgent = require('https-proxy-agent');
var proxyConfig = [{
  context: '/api',
  target: 'http://localhost:80',
  secure: false
}];

function setupForCorporateProxy(proxyConfig) {
  var proxyServer = process.env.http_proxy || process.env.HTTP_PROXY;
  if (proxyServer) {
    var agent = new HttpsProxyAgent(proxyServer);
    console.log('Using corporate proxy server: ' + proxyServer);
    proxyConfig.forEach(function(entry) {
      entry.agent = agent;
    });
  }
  return proxyConfig;
}

module.exports = setupForCorporateProxy(proxyConfig);

但这似乎也不起作用,并且请求一直针对 localhost:4200。

如果这很重要,应用程序正在 docker 容器中运行。

想法?

【问题讨论】:

    标签: angular typescript proxy observable


    【解决方案1】:

    代理配置中的上下文部分配置代理会影响哪些路由,因此代理不会干预来自 Angular 应用程序的实际路由。

    您的代理配置表明,以 /api 开头的所有内容都将重定向到端口 80。因此,如果您的翻译请求为 /api/translate,那么您的代理将生效。

    【讨论】:

    • 谢谢,你说得对。我没有注意到我在请求 url 中缺少一个 api/。
    • mmh 我会再看看我的配置是否我们配置了其他东西。但我们没有 docker 容器。所以也许在 docker 容器中还缺少一些东西。但我会检查。您是开始使用 proxy.js 还是 proxy.conf.json 的?我们在项目中使用了 json 配置。我之前没有使用过 https-proxy-agent
    • 再次检查:所以我们的 proxy.conf.json 和你的一样,但我们只有一个启动脚本ng serve ... --proxy-config proxy.conf.json。你的 docker 容器需要这个 https-proxy-agent 吗?如果不是,请尝试不使用此 proxy.js 脚本。我们只有在启动脚本中引用的 proxy.conf.json,其他任何地方都没有,它适用于所有 /api 调用。
    • 是的,如果它在 angular.json 中,则不需要它作为启动脚本中的参数。并且您的 docker-start 脚本不再使用 proxy.js 作为参数覆盖代理配置?嗯,也许它与在 docker 容器中运行它有关,但我真的不明白为什么会这样。我看看能不能找到更多的信息。
    猜你喜欢
    • 2023-04-07
    • 2021-05-29
    • 2021-12-16
    • 2021-12-22
    • 2019-05-27
    • 2014-09-23
    • 1970-01-01
    • 2016-08-25
    • 2019-06-29
    相关资源
    最近更新 更多