Реагировать proxy ошибка: не может переслать запрос /API или с localhost:3000 в http://localhost:8000 (ECONNREFUSED)

у меня есть интерфейс React, который использует jwt для аутентификации с бэкэндом Django. Бэкэнд работает и подключается просто отлично, используя представления django, но когда я пытаюсь прокси-запрос от React, он дает мне ошибку отказа в подключении.

ошибка прокси-сервера: не удалось запросить прокси-сервер /api / auth / token/get/ from localhost: 3000 to http://localhost:8000 (ECONNREFUSED).

подключение к http://localhost:8000/api/auth/token/obtain/ нормально работает. И отправка запроса POST с Axios также работает нормально и возвращает токен json. Но когда я прокси-сервер с node, он не работает.

в своем package.json Я:

  "proxy": {
    "/api/*":  {
      "target": "http://localhost:8000"
    }
  },

Edit:Открытая РЕПО. Вы можете легко работать, если у вас установлен docker. (использует 1 изображение и 2 контейнера). После клонирования просто запустите docker-compose build, потом docker-compose up.

Edit2: заголовки запрос:

*General*
Request URL: http://localhost:3000/api/auth/token/obtain/
Request Method: POST
Status Code: 500 Internal Server Error
Remote Address: [::1]:3000
Referrer Policy: no-referrer-when-downgrade

*Response Headers*
HTTP/1.1 500 Internal Server Error
X-Powered-By: Express
Date: Mon, 30 Apr 2018 21:23:17 GMT
Connection: keep-alive
Transfer-Encoding: chunked

*Request Headers
POST /api/auth/token/obtain/ HTTP/1.1
Host: localhost:3000
Connection: keep-alive
Content-Length: 45
Pragma: no-cache
Cache-Control: no-cache
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Content-Type: application/json
Accept: */*
Referer: http://localhost:3000/login
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,fr;q=0.8,ja;q=0.7

2 ответов


таким образом, проблема заключалась в том, что среда Node dev и среда Django dev работали в отдельных контейнерах docker, поэтому localhost имел в виду контейнер узла, а не мостовую сеть.

таким образом, ключ должен был использовать ссылки контейнера, которые автоматически создаются при использовании docker-compose, и используйте это как имя хоста. Поэтому я изменил его на

"proxy": {
    "/api":  {
        "target": "http://django:8000"
    }
},

и это сработало, пока вы запускаете оба контейнера с одним и тем же , иначе вы должны вручную указать external_links в своем .


я сталкиваюсь с той же проблемой, а также. Большинство результатов поиска упоминают добавление "secure": false или "ignorePath": true в конфигурацию прокси-сервера. Что-то вроде этого:--7-->

"proxy": { "/api/*": { "target": "http://localhost:8000", "secure": false } },

может быть стоит попробовать, но к сожалению ничего из этого не работает для меня. Хотя каждый адрес (http://localhost:3000 и http://localhost:8000) работать полностью нормально в браузере, возможно, поскольку контейнер фактически проксирует, ему нужно использовать Докер адрес?

изменить--

хорошо я думаю, я понял это. Я считаю, что это было связано с сообщением контейнера с контейнером. Глядя в ваш docker-compose, ваш сервер api называется django. Измените свой пакет.файл JSON для этого:

"proxy": { "/api/*": { "target": "http://django:8000", "secure": false } }