Proxy.conf.json работает не так, как ожидалось, для Angular CLI

#angular #angular-cli

#angular #angular-cli

Вопрос:

Я пытаюсь решить проблему политики CORS с заголовком Access-Control-Allow-Origin, используя Proxy.conf.json в моем приложении Angular. У меня нет большого опыта работы с Angular, и после того, как я попробовал так много поисковых запросов в Google, я выполнил приведенную ниже настройку своего приложения, и у меня это не работает.

Похоже, что Angular не собирается прокси, вызовы api работают так, как будто в прокси ничего не указано.

Я использую Node для размещения своего приложения, и у меня есть следующая команда для запуска моего приложения в package.json

 "ng": "ng",
 "start": "ng serve --host 0.0.0.0 -p 8080 --proxy-config proxy.conf.json", 
  

мой файл environment.ts содержит ссылку ниже.

 "proxyService":"http://machinename:7171/esbapi/servicedetails/v1/proxyservice"
  

Я вызываю вышеуказанный api с помощью post

 return this.http.post(environment.proxyService, jsonForPost).map((res: Response) => res.json());
  

У меня есть следующий код в моем proxy.conf.json. Я также пробовал использовать «/esbapi /* но у меня все еще не получается заставить его работать.

 {
  "/esbapi/servicedetails/v1/proxyservice*" :{
     "target":"http://machinename:7171/esbapi/servicedetails/v1/proxyservice",
     "secure": false,
     "changeOrigin" : true,
     "logLevel": "debug"
    }
}
  

Я все еще получаю проблему CORS при использовании приведенной выше конфигурации. Прокси, похоже, не работает.

Я также попробовал следующие шаги.

В одном сообщении упоминалось, что фиксированный URL-путь может не работать с методом post, поэтому я также попытался изменить значение в моем

environment.ts

 "proxyService":"/esbapi/servicedetails/v1/proxyservice" 
  

и попытался создать прокси для этого, который также не работал.

Вместо вызова

"target":"http://machinename:7171/esbapi/servicedetails/v1/proxyservice" ,

он вызывал

http://localhost:8080/esbapi/servicedetails/v1/proxyservice

Код не распознал цель, указанную в файле proxy conf.

Пожалуйста, дайте мне знать, если я делаю здесь что-то не так.

Еще несколько деталей ——-

Когда я запускаю сервер, я вижу следующую информацию в консоли.

 > ng serve --host 0.0.0.0 -p 8080 --proxy-config proxy.conf.json

** NG Live Development Server is listening on 0.0.0.0:8080, open your browser on http://localhost:8080/ **
 10% building modules 3/3 modules 0 active[HPM] Proxy created: /esbapi/servicedetails/v1/proxyservice*  ->  http://machinename:7171
[HPM] Subscribed to http-proxy events:  [ 'error', 'close' ]
  

И когда я делаю вызов из пользовательского интерфейса, приведенная ниже строка печатается на консоли

 [HPM] POST /esbapi/servicedetails/v1/proxyservice -> http://machinename:7171/esbapi/servicedetails/v1/proxyservice
  

Я включил консоль браузера и вижу следующее сообщение

 POST http://localhost:8080/esbapi/servicedetails/v1/proxyservice net::ERR_EMPTY_RESPONSE
  

Комментарии:

1. Включен ли CORS на сервере, к которому вы пытаетесь выполнить HTTP-вызовы?

Ответ №1:

он вызывал

http://localhost:8080/esbapi/servicedetails/v1/proxyservice

URI в порядке.

Отредактируйте proxy.conf.json , как показано ниже:

 {
  "/esbapi/servicedetails/v1/proxyservice" :{
     "target":"http://machinename:7171",
     "secure": false,
     "changeOrigin" : true,
     "logLevel": "debug"
    }
}
  

Комментарии:

1. пробовал и это, а также несколько других комбинаций, включая pathRewrite, но по-прежнему не удается выполнить. Я предоставил более подробную информацию выше, надеюсь, это поможет лучше понять проблему

2. Вы удалили changeOrigin свойство? И ключ свойства URI есть * в proxy.conf.json вашем сообщении. Это опечатка?

3. У меня действительно есть «changeOrigin»: true, и * просто там не было опечатки. Я попытался удалить *, но поведение такое же

4. Я также отслеживаю api по адресу machinename: 7171, и на этой конечной точке запрос не принимается.