Flutter+Node.js登录应用Android端连接失败求助:Connection refused
Flutter Android端无法连接Node.js后端:Connection refused 解决方案
问题描述
我用Flutter+Node.js开发了带登录/注册功能的应用,Postman和Chrome浏览器中请求正常,但Android模拟器和真机无法运行,报错:
App is not working on Android [ Connection refused (OS Error: Connection refused, errno = 111) ] address = localhost, port = 51034
已知需要修改localhost相关配置,但不清楚具体操作。
核心原因
Android设备/模拟器中的localhost指向设备自身,而非你的开发电脑,因此无法访问电脑上运行的Node.js服务。
解决方案
1. Android模拟器适配
将Flutter请求中的localhost替换为模拟器专属映射地址10.0.2.2:
// signin.dart中修改请求地址 var res = await http.post( "http://10.0.2.2:8080/signin", // 替换原localhost地址 headers: <String, String>{ "Content-Type": 'application/json;charSet=UTF-8' // 注意修复原代码的Context-Type拼写错误 }, body: <String, String>{ 'email': user.email, 'password': user.password, }, );
同时修复密码输入框的bug:
// 密码输入框的controller应绑定user.password而非user.email TextFormField( controller: TextEditingController(text: user.password), onChanged: (value) { user.password = value; }, // ... 其余代码不变 )
2. 真机测试适配
- 确保手机与开发电脑连接同一WiFi网络
- 获取电脑的局域网IP:
- Windows:CMD执行
ipconfig,查看IPv4地址 - Mac/Linux:终端执行
ifconfig或ip addr,查找局域网IP
- Windows:CMD执行
- 将Flutter请求地址替换为电脑局域网IP,例如:
"http://192.168.1.100:8080/signin" // 替换为你的实际IP - 修改Node.js服务监听配置,确保允许局域网访问:
// index.js中修改listen参数 app.listen(port, '0.0.0.0', () => { console.log("port is running on " + port); });
3. 额外检查项
- 确认电脑防火墙未拦截8080端口
- Node.js连接MongoDB的地址无需修改,保持
mongodb://localhost:27017/mydb即可(数据库与Node服务均运行在开发电脑上)
内容的提问来源于stack exchange,提问作者kunal20
相关产品推荐
相关产品推荐

