#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:
он вызывал
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, и на этой конечной точке запрос не принимается.