Express应用无法连接localhost:27017本地MongoDB服务报错ECONNREFUSED
问题原因
报错核心字段为connect ECONNREFUSED ::1:27017:
Node.js 17.0.0及以上版本调整了localhost的默认DNS解析优先级,会优先返回IPv6环回地址::1发起连接;但本地默认安装的MongoDB服务仅绑定IPv4环回地址127.0.0.1,没有在IPv6的27017端口提供监听,因此连接被直接拒绝。
你能通过mongosh正常操作数据库,是因为mongosh默认优先将localhost解析为IPv4地址,和新版Node.js的解析逻辑不一致,和代码逻辑、驱动安装、服务运行状态无关。
修复方案
任选一种即可:
- 最简便方案:修改数据库连接字符串,将
localhost替换为127.0.0.1强制走IPv4连接,修改后的database.js连接逻辑如下:
async function connect() { const client = await MongoClient.connect("mongodb://127.0.0.1:27017"); database = client.db("blog"); }
修改后保存文件,nodemon会自动重启应用,连接即可恢复正常。
- 无代码修改方案:调整MongoDB配置,让服务同时监听IPv4和IPv6地址。找到MongoDB安装目录下的
mongod.conf配置文件,修改net.bindIp配置项为127.0.0.1,::1,保存后重启MongoDB服务即可。 - 启动参数方案:启动Node应用时追加参数指定DNS解析顺序,强制优先使用IPv4,启动命令示例:
node --dns-result-order=ipv4first app.js
如果使用nodemon,需要将该参数配置到package.json的start脚本中,该方案不需要改代码或数据库配置,但每次启动都需要携带对应参数。
内容的提问来源于stack exchange,提问作者Avishka Indula
相关产品推荐
相关产品推荐

