macOS Big Sur brew安装MongoDB可mongosh连接但Mongoose报ECONNREFUSED错误
问题原因
- 报错本质是Node.js尝试通过IPv6本地地址
::1连接MongoDB被拒绝,和Mongo shell的连接逻辑差异是核心诱因:- brew默认安装的mongodb-community仅绑定了IPv4本地回环地址
127.0.0.1,没有监听IPv6的::1地址 - mongosh解析
localhost时会优先尝试IPv4地址,所以能正常连接到127.0.0.1:27017 - Node.js v17及以上版本调整了DNS解析默认规则,解析
localhost时会优先返回IPv6地址::1,Mongoose拿到这个地址发起连接时自然会被未监听IPv6的MongoDB拒绝
- brew默认安装的mongodb-community仅绑定了IPv4本地回环地址
解决方案
以下方案按需选择即可:
方案1:直接修改连接地址(最快捷)
把连接字符串中的localhost替换为IPv4本地地址127.0.0.1,强制走IPv4连接:
import mongoose from 'mongoose'; mongoose.connect('mongodb://127.0.0.1:27017/mydb', { useNewUrlParser: true, useUnifiedTopology: true });
方案2:修改MongoDB配置支持IPv6
如果需要保留localhost写法,也可以调整MongoDB的监听配置:
- 找到MongoDB配置文件:
- Intel芯片Mac路径:
/usr/local/etc/mongod.conf - M系列芯片Mac路径:
/opt/homebrew/etc/mongod.conf
- Intel芯片Mac路径:
- 找到
net配置段下的bindIp项,修改为同时绑定IPv4和IPv6本地地址:net: bindIp: 127.0.0.1, ::1 port: 27017 - 重启MongoDB服务生效:
brew services restart mongodb-community
方案3:添加解析参数强制IPv4
也可以在连接字符串后加family=4参数,指定Node.js用IPv4解析localhost:
mongoose.connect('mongodb://localhost:27017/mydb?family=4', { useNewUrlParser: true, useUnifiedTopology: true });
内容的提问来源于stack exchange,提问作者Ethan Davis
相关产品推荐
相关产品推荐

