ccl*_*oyd 12 django node.js reactjs axios
我有一个React前端,它使用jwt来验证Django后端.后端工作,并使用django视图连接正常,但当我尝试代理来自React的请求时,它给了我一个连接拒绝错误.
代理错误:无法将请求/ api/auth/token/gain /从localhost:3000代理到http:// localhost:8000(ECONNREFUSED).
连接到http:// localhost:8000/api/auth/token /获取/正常工作.并且使用Axios发送POST请求也能正常工作并返回令牌json.但是当我用节点代理它时,它不起作用.
在我的package.json身上:
"proxy": {
"/api/*": {
"target": "http://localhost:8000"
}
},
Run Code Online (Sandbox Code Playgroud)
编辑: 公共回购.如果安装了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
Run Code Online (Sandbox Code Playgroud)
小智 29
我遇到了类似的问题,但是是在 Mac 机器上。我在package.jsonlocalhost中进行了更改,这对我有用,如下所示:127.0.0.1
"proxy": "http://127.0.0.1:5000"
Run Code Online (Sandbox Code Playgroud)
ccl*_*oyd 10
所以问题是因为Node dev环境和Django dev环境都在单独的docker容器中运行,所以localhost指的是节点容器,而不是桥接网络.
所以关键是使用容器链接,这些链接在使用时自动创建docker-compose,并将其用作主机名.所以我改成了
"proxy": {
"/api": {
"target": "http://django:8000"
}
},
Run Code Online (Sandbox Code Playgroud)
只要您使用相同的docker-compose命令启动两个容器,这就有效,否则您必须在docker-compose.yml文件中手动指定external_links .
小智 10
实际上并没有在这里得到我正在寻找的答案,但有一个适合我的替代解决方案。我认为它与 Node v17 特别相关,因为那是我开始发生这种情况的时候,但解决方案非常简单。
我更新了:
"proxy": "http://localhost:8000"
Run Code Online (Sandbox Code Playgroud)
到:
"proxy": "http://127.0.0.1:8000"
Run Code Online (Sandbox Code Playgroud)
如果它是相关的(我认为不是)-我正在代理到 Django 服务器。
我也遇到了同样的问题。大多数搜索结果都提到将"secure": false或添加"ignorePath": true到您的代理配置中。像这样:
"proxy": {
"/api/*": {
"target": "http://localhost:8000",
"secure": false
}
},
Run Code Online (Sandbox Code Playgroud)
可能值得一试,但是不幸的是,这些都不适合我。尽管每个地址(http:// localhost:3000和http:// localhost:8000)在浏览器中都可以正常工作,但也许由于容器实际上是代理服务器,因此它需要使用Docker地址吗?
编辑 -
好吧,我想我明白了。我相信这确实与容器到容器的通信有关。在您docker-compose看来,您的api服务器称为django。将您的package.json文件更改为此:
"proxy": {
"/api/*": {
"target": "http://django:8000",
"secure": false
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18117 次 |
| 最近记录: |