You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

前端请求http://localhost:8800/login时出现net::ERR_CONNECTION_REFUSED错误的解决方案咨询

前端请求http://localhost:8800/login时出现net::ERR_CONNECTION_REFUSED错误的解决方案咨询

Hey there, let’s troubleshoot this connection refused error together. I’ve gone through your code and spotted several key areas to check and fix:

1. 端口不匹配(最可能的根本原因)

看你的index.js文件,后端服务器配置的监听端口是process.env.PORT || 8000——默认情况下它会运行在8000端口,但你的前端却在尝试连接8800端口。这就是你收到连接拒绝错误的直接原因:8800端口上根本没有运行服务器!

修复方案选其一即可:

  • 修改前端的API请求地址为http://localhost:8000/login
  • 在你的.env文件里设置PORT=8800
  • 直接把index.js里的端口代码改成const PORT = process.env.PORT || 8800

2. 确认后端服务器是否真的启动成功

启动后端时,留意控制台是否输出server listening on [PORT]这条信息。如果没看到,说明服务器没有正常启动,常见原因包括:

  • 数据库连接失败(检查ConnectDB配置里的凭证或数据库URI是否有拼写错误)
  • 依赖包缺失(重新运行npm install确保所有依赖都已安装)
  • 代码语法错误(查看控制台里的红色报错信息)

你可以先临时注释掉ConnectDB()调用,再重启服务器——如果服务器能正常监听端口,那问题就出在数据库连接上。

3. 修正中间件顺序

在index.js里,你先挂载了路由,再加载bodyParser.json()中间件。这会导致路由处理器无法读取req.body(它会是空对象),直接破坏登录/注册逻辑。

正确的中间件顺序:

//!use middlewares
app.use(cors());
app.use(bodyParser.json()); // 先解析请求体
app.use(userRoutes); // 再挂载路由
app.use(taskRoutes);

4. 修复Login控制器里的异步问题

你的Login函数调用bcrypt.compare时没有加await——这是一个异步函数,不加await的话passwordMatch会是一个Promise对象,而不是布尔值,这会导致即使密码正确,也会触发密码错误的逻辑分支。

修复代码:

const passwordMatch = await bcrypt.compare(data.password, existUser.password);

5. 优化CORS配置(可选但更稳妥)

虽然app.use(cors())在大多数情况下能用,但明确指定前端的源地址可以避免潜在的CORS问题:

app.use(cors({
  origin: "http://localhost:3000", // 替换成你前端实际运行的端口
  credentials: true
}));

6. 再次检查前端请求细节

确保前端发送的是POST请求,地址是修正后的正确端口,并且请求体里包含email和password两个字段,格式也符合要求。

建议先优先解决端口不匹配的问题——这是最直观的错误。搞定之后,再依次排查其他点,就能让登录流程正常运行了。

备注:内容来源于stack exchange,提问作者Mahendra Meghwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 15:48:14