Реагировать 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
}
}