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

Express服务器无法连接MongoDB问题求助

Express连接MongoDB失败:ECONNREFUSED ::1:27017 解决方法

核心问题定位

报错信息里的connect ECONNREFUSED ::1:27017表明你的Node.js程序尝试通过IPv6地址::1连接MongoDB,但你的MongoDB服务大概率只监听了IPv4的127.0.0.1,或者系统的localhost解析优先走IPv6,导致连接被拒绝。而Mongo Compass能正常连接,是因为Compass默认使用IPv4地址或你的MongoDB配置允许IPv4连接。

快速修复方案

方案1:强制使用IPv4地址连接

将连接字符串中的localhost替换为127.0.0.1,强制程序通过IPv4连接MongoDB:

const connectionStringURI = `mongodb://127.0.0.1:27017`;

方案2:修改MongoDB配置支持多地址监听

如果需要MongoDB同时支持IPv4和IPv6连接,修改MongoDB配置文件(如mongod.cfg),将net.bindIp设置为0.0.0.0(监听所有IPv4地址)或::,0.0.0.0(同时监听IPv6和IPv4):

net:
  bindIp: 0.0.0.0
  port: 27017

修改完成后重启MongoDB服务即可。

代码优化建议

原代码缺少错误处理逻辑,即使连接失败仍会启动服务器,建议添加错误捕获,并改用更易维护的async/await写法:

const express = require("express");
const { MongoClient } = require("mongodb");

const app = express();
const port = 3001;
const connectionStringURI = `mongodb://127.0.0.1:27017`;
let db;

async function connectToDB() {
  try {
    const client = await MongoClient.connect(connectionStringURI, {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    });
    db = client.db("你的数据库名称"); // 建议显式指定数据库名,避免默认连接test库
    console.log("MongoDB连接成功");
    
    // 连接成功后再启动服务器
    app.listen(port, () => {
      console.log(`App listening at http://localhost:${port}`);
    });
  } catch (err) {
    console.error("MongoDB连接失败:", err);
    process.exit(1); // 连接失败时退出进程,避免无效服务运行
  }
}

connectToDB();

验证步骤

  1. 若修改了MongoDB配置,重启MongoDB服务
  2. 运行修改后的代码,查看控制台是否输出「MongoDB连接成功」
  3. 若问题仍存在,检查MongoDB端口监听状态:
    • Windows命令提示符执行:netstat -ano | findstr :27017
    • 确认输出中存在0.0.0.0:27017或127.0.0.1:27017的监听记录

内容的提问来源于stack exchange,提问作者Liam Allen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:33:18