React 代理错误:无法将请求 /api/ 从 localhost:3000 代理到 http://localhost:8000 (ECONNREFUSED)

新手上路,请多包涵

我有一个使用 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 许可协议

阅读 1.2k
2 个回答

所以问题是因为 Node 开发环境和 Django 开发环境都在单独的 docker 容器中运行,所以 localhost 指的是节点容器,而不是桥接网络。

所以关键是使用容器链接,这些链接是在使用 docker-compose 时自动创建的,并将其用作主机名。所以我把它改成了

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

只要您使用相同的 docker-compose 命令启动两个容器,这就会奏效,否则您必须在 docker-compose.yml 文件中手动指定 external_links。

原文由 cclloyd 发布,翻译遵循 CC BY-SA 4.0 许可协议

我遇到了类似的问题,但在 Mac 机器上。我在 package.json 中将 localhost 更改为 127.0.0.1 并且对我有用,如下所示:

 "proxy": "http://127.0.0.1:5000"

原文由 Abhishek Saini 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题