Угловой с https-прокси-агентом работает только с трейлингом / — чего мне не хватает?

#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)  

Кроме того, по какой-то причине мне пришлось удалить данные своего браузера.