Прокси-приложение Angular 7 для конечной точки сервера, работающей на другом порту - PullRequest
1 голос
/ 11 апреля 2019

Я пытаюсь настроить внутренний прокси-сервер, чтобы все запросы, выполненные в клиентском приложении, работающем на порте 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.

Приложение работает внутри контейнера докера, если это имеет значение.

Идея идеи?

1 Ответ

1 голос
/ 11 апреля 2019

Контекстная часть в конфигурации прокси-сервера настраивает, какие маршруты влияют на прокси, поэтому прокси не вмешивается в фактические маршруты из вашего углового приложения.

Конфигурация вашего прокси-сервера утверждает, что все, начиная с / api, будет перенаправлено на порт 80. Поэтому, если ваш запрос на перевод будет / api / translate, ваш прокси вступит в силу.

...