Flutter应用连接本地Node.js+MongoDB后端遇连接拒绝问题求助
Flutter 连接本地 Node.js 后端出现连接拒绝问题
问题描述
我正尝试将Flutter应用连接至使用MongoDB作为数据库的本地Node.js后端。后端已成功连接到运行在localhost上的MongoDB数据库,终端输出的“Database connected”信息可证明这一点。但在模拟器中使用http://10.0.2.2:8082访问后端API时,出现“Connection refused”错误。
相关代码
Node.js 后端代码
const express = require("express"); const app = express(); const mongoose = require("mongoose"); const { MONGO_DB_CONFIG } = require("./config/app.config"); const errors = require("./middleware/errors"); mongoose.Promise = global.Promise; mongoose.connect(MONGO_DB_CONFIG.DB, { useNewUrlParser: true, useUnifiedTopology: true }).then( () => { console.log("Database connected") }, (error) => { console.log("Database can't be connected: " + error); } ); app.use(express.json()); app.use('/uploads', express.static('uploads')); app.use("/api", require("./routes/app.routes")); app.use(errors.errorHandler); app.listen(process.env.port || 4000, function () { console.log("Ready to go !"); })
Flutter 应用代码
class Config { static const String appName = "Shopping App"; static const String apiURL = "http://10.0.2.2:8082"; static const String productURL = "/api/products"; }
已尝试的操作
- 在Flutter应用中使用
localhost:4000、127.0.0.1:4000等不同URL,问题依旧 - 更换后端运行端口,未解决
- 已验证后端正常运行,可通过Postman访问
http://localhost:4000/api/products/
解决方案
1. 修正端口匹配问题
Node后端监听的是4000端口(代码中app.listen(process.env.port || 4000)),但Flutter配置里用的是8082端口,这是核心问题。修改Flutter的apiURL为:
static const String apiURL = "http://10.0.2.2:4000";
2. 确保后端绑定所有网络接口
修改Node后端的app.listen代码,指定绑定0.0.0.0,确保后端能被模拟器访问:
app.listen(process.env.port || 4000, '0.0.0.0', function () { console.log("Ready to go !"); })
3. 检查防火墙设置
本地防火墙可能阻止模拟器访问4000端口,暂时关闭防火墙或添加允许Node后端端口的入站规则。
4. 根据模拟器类型调整URL
- Android模拟器:使用
10.0.2.2映射主机localhost是正确的 - iOS模拟器:直接使用
localhost或127.0.0.1即可,因为iOS模拟器与主机共享网络栈
5. 验证网络连通性
在模拟器内置浏览器中访问http://10.0.2.2:4000/api/products,如果能正常返回数据,说明网络配置正常,可排查Flutter请求逻辑;若仍无法访问,继续检查后端和网络设置。
内容的提问来源于stack exchange,提问作者pomoworko.com
相关产品推荐
相关产品推荐

