求助解决MongoDB连接错误:MongoServerSelectionError: connect ECONNREFUSED ::1:27017
首先帮你拆解下这个错误:MongoServerSelectionError: connect ECONNREFUSED ::1:27017 本质就是你的Node.js应用无法连接到本地的MongoDB服务——::1是IPv6格式的本地回环地址(对应IPv4的127.0.0.1),ECONNREFUSED表示连接被拒绝,通常是因为MongoDB服务没启动、连接地址配置不对,或者服务绑定的IP和你程序用的不匹配。
先看看你遇到的完整错误日志:
D:\Others\HTML\login node\node_modules\mongojs\node_modules\mongodb\lib\utils.js:698 throw error; ^ MongoServerSelectionError: connect ECONNREFUSED ::1:27017 at Timeout._onTimeout (D:\Others\HTML\login node\node_modules\mongojs\node_modules\mongodb\lib\core\sdam\topology.js:438:30) at listOnTimeout (node:internal/timers:564:17) at process.processTimers (node:internal/timers:507:7) Emitted 'error' event on Database instance at: at D:\Others\HTML\login node\node_modules\mongojs\lib\database.js:36:16 at D:\Others\HTML\login node\node_modules\mongojs\node_modules\mongodb\lib\utils.js:695:9 at D:\Others\HTML\login node\node_modules\mongojs\node_modules\mongodb\lib\mongo_client.js:285:23 at connectCallback (D:\Others\HTML\login node\node_modules\mongojs\node_modules\mongodb\lib\operations\connect.js:367:5) at D:\Others\HTML\login node\node_modules\mongojs\node_modules\mongodb\lib\operations\connect.js:554:14 at Object.connectHandler [as callback] (D:\Others\HTML\login node\node_modules\mongojs\node_modules\mongodb\lib\core\sdam\topology.js:286:11) at Timeout._onTimeout (D:\Others\HTML\login node\node_modules\mongojs\node_modules\mongodb\lib\core\sdam\topology.js:443:25) at listOnTimeout (node:internal/timers:564:17) at process.processTimers (node:internal/timers:507:7) { reason: TopologyDescription { type: 'Single', setName: null, maxSetVersion: null, maxElectionId: null, servers: Map(1) { 'localhost:27017' => ServerDescription { address: 'localhost:27017', error: Error: connect ECONNREFUSED ::1:27017 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1300:16) { name: 'MongoNetworkError' }, roundTripTime: -1, lastUpdateTime: 157429114, lastWriteDate: null, opTime: null, type: 'Unknown', topologyVersion: undefined, minWireVersion: 0, maxWireVersion: 0, hosts: [], passives: [], arbiters: [], tags: [] } }, stale: false, compatible: true, compatibilityError: null, logicalSessionTimeoutMinutes: null, heartbeatFrequencyMS: 10000, localThresholdMS: 15, commonWireVersion: null } } Node.js v18.12.1 [nodemon] app crashed - waiting for file changes before starting...
针对你的新手情况,我给你几个一步步排查的方案,跟着做就行:
1. 先确认MongoDB服务是否已经启动
这是最常见的原因!如果MongoDB没跑起来,程序肯定连不上:
- Windows系统:
- 按下
Win + R,输入services.msc回车打开服务管理器。 - 在列表里找到
MongoDB(可能叫MongoDB Server或带版本号的名字)。 - 如果状态是“已停止”,右键点击选择“启动”;也可以设置成“自动”,这样开机就自动启动服务。
- 按下
- Mac系统:
如果你用Homebrew安装的,打开终端输入:
手动安装的话,找到MongoDB安装目录,运行brew services start mongodb-communitymongod命令启动服务。 - Linux系统:
终端输入:
想要开机自启就再加一句:sudo systemctl start mongodsudo systemctl enable mongod
2. 修改MongoDB连接字符串,用IPv4地址代替localhost
有时候系统会把localhost解析成IPv6的::1,但MongoDB默认可能只绑定了IPv4的127.0.0.1,这时候就会连不上。
找到你代码里连接MongoDB的地方,把原来的:
// 比如原来的可能是这样 const db = mongojs('localhost:27017/你的数据库名')
改成:
const db = mongojs('127.0.0.1:27017/你的数据库名')
强制用IPv4地址连接,大概率能解决解析问题。
3. 检查MongoDB的配置文件,确认绑定IP
如果上面两步都不行,可能是MongoDB的配置限制了连接IP:
找到MongoDB的配置文件(Windows一般在C:\Program Files\MongoDB\Server\版本号\bin\mongod.cfg;Mac/Linux可能在/usr/local/etc/mongod.conf或/etc/mongod.conf),打开后找到net部分:
net: port: 27017 bindIp: 127.0.0.1 # 这里如果是127.0.0.1,只能本地IPv4访问;如果是0.0.0.0,允许所有IP访问(本地开发没问题)
确保bindIp不是只绑定了特定的非本地IP,修改后记得重启MongoDB服务。
4. 确认MongoDB是否安装正确
如果是刚安装的MongoDB,可能安装过程中没配置好服务。比如Windows安装时没勾选“Install MongoDB as a Service”,这时候可以重新运行安装程序选择修复安装,或者手动创建服务。
按照上面的步骤一步步试,应该能解决你的问题。如果还是不行,可以告诉我你用的操作系统和MongoDB的安装方式,我再帮你细化排查。
备注:内容来源于stack exchange,提问作者Parikshith G

