React代理Django后端请求遭拒:ECONNREFUSED错误求助
排查React代理到Django的ECONNREFUSED问题
既然你已经确认直接访问Django端点、用Axios直连都能正常返回结果,那问题肯定出在代理环节的配置或本地环境交互细节上,试试下面这些针对性的排查步骤:
1. 确认Django服务的绑定地址
默认python manage.py runserver会把服务绑定到127.0.0.1:8000,但部分系统对localhost的解析可能偏向IPv6(比如指向::1),导致代理请求找不到服务。
- 改成绑定到所有网络地址启动Django:
python manage.py runserver 0.0.0.0:8000 - 同时把React的代理目标改成
http://127.0.0.1:8000(不管是package.json还是setupProxy.js配置),再测试请求。
2. 检查React代理配置的正确性
场景1:用package.json的proxy字段
确保package.json里的proxy配置没有拼写错误,格式如下:
{ "name": "your-react-app", "proxy": "http://localhost:8000", // 其他项目配置... }
注意:
- 不要在地址末尾加斜杠(比如别写成
http://localhost:8000/) - 端口号必须和Django启动端口完全一致
- 修改后必须重启React开发服务器,配置才会生效!
场景2:用setupProxy.js(多代理/复杂配置场景)
如果你的React项目是create-react-app 2.x及以上版本,且需要自定义代理规则,在src目录下创建setupProxy.js:
const { createProxyMiddleware } = require('http-proxy-middleware'); module.exports = function(app) { app.use( '/api', createProxyMiddleware({ target: 'http://localhost:8000', changeOrigin: true, // 关键参数:修改请求头Host字段匹配目标服务器 }) ); };
先安装依赖:
npm install http-proxy-middleware --save-dev
3. 确保React请求用相对路径
在React组件里发请求时,必须用相对路径触发代理:
// 正确:相对路径,会走React代理 axios.post('/api/auth/token/obtain/', { username: 'xxx', password: 'xxx' }) // 错误:绝对路径,直接访问8000(你说这个是正常的,但还是确认下代码里有没有写错) axios.post('http://localhost:8000/api/auth/token/obtain/', { ... })
4. 排查本地端口占用与防火墙
- 确认8000端口确实被Django占用:
- Mac/Linux:
lsof -i :8000,查看输出里是否有Django相关进程 - Windows:
netstat -ano | findstr :8000,找到PID后去任务管理器杀掉占用进程,再重启Django
- Mac/Linux:
- 暂时关闭本地防火墙/杀毒软件,部分安全工具会拦截本地端口间的请求。
5. 验证Django的ALLOWED_HOSTS配置
虽然你直接访问没问题,但还是确认下settings.py里的配置:
ALLOWED_HOSTS = ['localhost', '127.0.0.1', '0.0.0.0']
修改后重启Django服务。
内容的提问来源于stack exchange,提问作者cclloyd
相关产品推荐
相关产品推荐

