Reagieren Proxy error: es Konnte keine proxy-request /api/ localhost:3000 zu http://localhost:8000 (ECONNREFUSED)
Ich habe einen Reagieren frontend verwendet jwt für die Authentifizierung mit dem Django-backend. Das backend funktioniert und verbindet sich Prima mit django Ansichten, aber wenn ich versuche, proxy eine Anfrage Reagieren, gibt es mir ein Connection Refused Fehler.
Proxy error: es Konnte keine proxy-request /api/auth/token/erhalten/von localhost:3000 bis http://localhost:8000 (ECONNREFUSED).
Anschluss an http://localhost:8000/api/auth/token/obtain/ normal arbeitet. Und senden einer POST-Anforderung mit Axios auch normal funktioniert und gibt den token json. Aber wenn ich den proxy mit Knoten, es funktioniert nicht.
In meinem package.json
ich habe:
"proxy": {
"/api/*": {
"target": "http://localhost:8000"
}
},
Edit: Public repo. Sie laufen leicht, wenn Sie docker installiert. (verwendet 1 Bild und 2 Container). Nach dem Klonen einfach laufen docker-compose build
, dann docker-compose up
.
Edit2: - Header der Anfrage:
*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
- Es wäre hilfreich, wenn Sie veröffentlicht Ihre Django-Knoten-code.
- Sorry. Hinzugefügt.
- Nicht sicher, und können nicht schnell diese lokal ausgeführt. CRA-docs geben Sie Ihre
target
Muster falsch sein könnte. Haben Sie versucht:"/api"
statt"/api/*"
...mich, wenn es versucht, aufapi/only-one-more-element
- funktioniert nicht mit
/api
,/api/
oder/api/*
oder nur mit"proxy":"http://localhost:8000"
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also das Problem war, da sowohl der Knoten dev-Umgebung und die Django-dev-Umgebung ausgeführt wurden, in separaten docker-Container, so
localhost
bezog sich auf den Knoten container, die nicht der bridged-Netzwerk.So, den Schlüssel zu nutzen, um die container-links, die werden automatisch erstellt, wenn Sie
docker-compose
, und verwenden Sie diese als hostname. Also änderte ich es zuUnd das funktionierte, so lange, wie Sie starten beide Container mit dem gleichen
docker-compose
- Befehl, andernfalls müssen Sie manuell festlegen, external_links in Ihremdocker-compose.yml
Datei.Bin ich mit den gleichen problem. Die meisten Suchergebnisse erwähnen, hinzufügen
"secure": false
oder"ignorePath": true
zu Ihrem proxy-config. So etwas wie dieses:Möglicherweise einen Versuch Wert, aber leider keines dieser arbeitete für mich. Obwohl jede Adresse (http://localhost:3000 und http://localhost:8000) arbeiten völlig in Ordnung, im browser, vielleicht ist da der container tatsächlich proxying es braucht einen Docker-Adresse?
BEARBEITEN--
Okay ich denke ich habe es herausgefunden. Ich glaube, es hat zu tun mit dem container zu container-Kommunikation. Suchen in Ihrer
docker-compose
, Ihre api-server aufgerufendjango
. Ändern Sie Ihr Paket.json-Datei zu diesem:localhost
, nicht beziehen sich auf den gleichen host wie django.Wenn Ihr auf eine neuere version CRA 2.0+ benötigen Sie dazu über einen manuellen proxy.
https://facebook.github.io/create-react-app/docs/proxying-api-requests-in-development#configuring-the-proxy-manually