我有一个使用 jwt 对 Django 后端进行身份验证的 React 前端。后端工作正常,并且使用 django 视图连接得很好,但是当我尝试代理来自 React 的请求时,它给了我一个 Connection Refused 错误。
代理错误:无法将请求 /api/auth/token/obtain/ 从 localhost:3000 代理到 http://localhost:8000 (ECONNREFUSED)。
连接到 http://localhost:8000/api/auth/token/obtain/ 工作正常。而且用axios发送POST请求也能正常工作,返回token json。但是当我用节点代理它时,它不起作用。
在我的 package.json
我有:
"proxy": {
"/api/*": {
"target": "http://localhost:8000"
}
},
编辑: 公共回购。如果您安装了 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
原文由 cclloyd 发布,翻译遵循 CC BY-SA 4.0 许可协议
所以问题是因为 Node 开发环境和 Django 开发环境都在单独的 docker 容器中运行,所以
localhost
指的是节点容器,而不是桥接网络。所以关键是使用容器链接,这些链接是在使用
docker-compose
时自动创建的,并将其用作主机名。所以我把它改成了只要您使用相同的
docker-compose
命令启动两个容器,这就会奏效,否则您必须在docker-compose.yml
文件中手动指定 external_links。