Node.js连接MongoDB报ECONNREFUSED错误致npm崩溃问题排查
MongoDB本地连接ECONNREFUSED报错排查
问题表现
运行Node.js项目时进程持续崩溃,调用MongoDB连接逻辑时抛出MongoServerSelectionError,核心错误提示为connect ECONNREFUSED ::1:27017,提示服务选择超时,无法建立数据库连接。
涉及代码
数据库连接工具代码如下:
const mongodb = require('mongodb'); const MongoClient = mongodb.MongoClient; let dataBase; async function connect() { const client = await MongoClient.connect('mongodb://localhost:27017'); dataBase = client.db('blog'); }; function getDb() { if (!dataBase) { throw { message: "Database connection not established" }; } return dataBase; }; module.exports = { connectToDatabase: connect, getDb: getDb };
报错核心信息
MongoServerSelectionError: connect ECONNREFUSED ::1:27017
报错栈显示MongoDB驱动尝试连接IPv6回环地址::1的27017端口时被拒绝。
根因分析
- 高版本Node.js解析域名
localhost时,会优先尝试解析为IPv6回环地址::1,再尝试IPv4地址127.0.0.1 - 默认配置下的本地MongoDB服务仅绑定IPv4回环地址
127.0.0.1,没有监听IPv6地址的27017端口,导致连接请求被直接拒绝 - 额外可能:本地MongoDB服务本身未启动,27017端口无进程监听
修复方案
- 优先使用成本最低的修复:将连接字符串中的
localhost替换为明确的IPv4地址127.0.0.1,强制驱动走IPv4连接,修改后的连接代码为:
const client = await MongoClient.connect('mongodb://127.0.0.1:27017');
- 若需要保留
localhost写法,可修改MongoDB配置文件,增加IPv6地址绑定配置,让MongoDB同时监听::1的27017端口,修改完成后重启MongoDB服务即可 - 操作前先确认MongoDB服务状态:Windows系统执行
netstat -ano | findstr "27017",macOS/Linux系统执行lsof -i:27017,确认27017端口存在MongoDB监听进程,若没有则先启动本地MongoDB服务。
内容的提问来源于stack exchange,提问作者falana gbolahan
相关产品推荐
相关产品推荐

