#django #angular #api #proxy #https-proxy-agent
#джанго #угловой #API #полномочие #https-прокси-агент
Вопрос:
Я создал угловой проект с помощью ngx-ракеты.
- Угловой интерфейс, работающий на локальном хосте:4200
- Серверная часть, обслуживающая api в locahlost:8000
Я использую предварительно настроенный https-прокси-агент с ngx-rocket для перенаправления моих запросов api с моего интерфейса на мой сервер. Раньше у меня были конечные точки api localhost:8000/api/endpoint
, и это работало, но теперь я переключил серверную часть на прослушивание localhost:8000/endpoint
. Я адаптировал прокси-сервер, чтобы отразить эти изменения, но по некоторым причинам теперь он работает только в том случае, если я запрашиваю localhost:4200/endpoint/
с конечной косой чертой, тогда как раньше этого не было.
Я мог бы просто изменить конечные точки в своем интерфейсе, но я бы предпочел понять, что происходит, и устранить основную проблему.
proxy.conf.js
const proxyConfig = [ { context: '/api/*', pathRewrite: { '^/api': '' }, target: 'http://localhost:8000/', changeOrigin: true, secure: false, logLevel: 'debug' } ];
окружающая среда.ts
export const environment = { production: false, version: env.npm_package_version '-dev', serverUrl: '/api/', defaultLanguage: 'de-DE', supportedLanguages: ['de-DE', 'en-US'], };
Пример обслуживания:
private endpointUrl = 'endpoint'; getEndpointList(): Observablelt;Endpoint[]gt; { return this.http .getlt;ApiResponselt;Endpointgt;gt;(this.endpointUrl) };
Эта конечная точка не работает, но она работала со старой конфигурацией. Если я изменю его на private endpointUrl = 'endpoint/';
, это сработает.
Текущее поведение:
Запрашивающий http://localhost:4200/api/endpoint
- Нет входа прокси в угловую консоль
Сеть (инструменты разработки Chrome):
- Код состояния:
301
- Расположение:
/endpoint/
- Результирующий запрос:
http://localhost:4200/endpoint/
Запрашивающий http://localhost:4200/api/endpoint/
[HPM] Rewriting path from "/api/endpoint/" to "/endpoint/"
[HPM] GET /api/endpoint/ ~gt; http://localhost:8000/
Сеть (инструменты разработки Chrome):
- Код состояния:
200
- Расположение:
/endpoint/
- Возвращает ответ api
Ожидаемое поведение:
Запрос api должен работать без завершающей косой черты. Я боюсь, что это что-то глупое, но в настоящее время я не могу этого понять, поэтому любая помощь была бы очень признательна.
Ответ №1:
Теперь я решил эту проблему.
Я использовал django с платформой Django REST в качестве серверной части, которая по умолчанию использует URL-адреса с косой чертой. Когда я открыл страницу в браузере, она также работала без косой черты, потому что я был автоматически перенаправлен. Эта пересылка не работала через прокси-сервер, потому что в ответе, отправленном с localhost:8000, указано местоположение /endpoint/
, которое всегда приводило к localhost:4200
.
Я исправил это, удалив косую черту в urls.py:
router = routers.DefaultRouter(trailing_slash=False)
Кроме того, по какой-то причине мне пришлось удалить данные своего браузера.