请求解释MongooseServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017错误原因
问题描述
使用Mongoose连接MongoDB时触发如下错误:
MongooseServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017 at NativeConnection.Connection.openUri (C:\Users\User\stackoverflow-clone\server\node_modules\mongoose\lib\connection.js:847:32) at C:\Users\User\stackoverflow-clone\server\node_modules\mongoose\lib\index.js:351:10 at C:\Users\User\stackoverflow-clone\server\node_modules\mongoose\lib\helpers\promiseOrCallback.js:32:5 at new Promise () at promiseOrCallback (C:\Users\User\stackoverflow-clone\server\node_modules\mongoose\lib\helpers\promiseOrCallback.js:31:10) at Mongoose._promiseOrCallback (C:\Users\User\stackoverflow-clone\server\node_modules\mongoose\lib\index.js:1149:10) at Mongoose.connect (C:\Users\User\stackoverflow-clone\server\node_modules\mongoose\lib\index.js:350:20) at connect (C:\Users\User\stackoverflow-clone\server\index.js:6:19) at Object. (C:\Users\User\stackoverflow-clone\server\index.js:11:3) at Module._compile (node:internal/modules/cjs/loader:1126:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1180:10) at Module.load (node:internal/modules/cjs/loader:1004:32) at Function.Module._load (node:internal/modules/cjs/loader:839:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) at node:internal/main/run_main_module:17:47 { reason: TopologyDescription { type: 'Single', setName: null, maxSetVersion: null, maxElectionId: null, servers: Map(1) { 'localhost:27017' => ServerDescription { address: 'localhost:27017', error: Error: connect ECONNREFUSED 127.0.0.1:27017 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1247:16) { name: 'MongoNetworkError' }, roundTripTime: -1, lastUpdateTime: 2145741465, lastWriteDate: null, opTime: null, type: 'Unknown', compatible: true, compatibilityError: null, logicalSessionTimeoutMinutes: null, heartbeatFrequencyMS: 10000, localThresholdMS: 15, commonWireVersion: null } } }
错误原因及对应解决步骤
这个错误本质是Mongoose无法连接到本地27017端口的MongoDB服务,常见诱因和解决办法如下:
MongoDB服务未启动
本地MongoDB进程没运行,导致连接请求被拒绝。
解决:启动MongoDB服务。Windows可通过系统服务管理器找到MongoDB服务并启动;macOS/Linux用sudo systemctl start mongod(systemd系统)或brew services start mongodb-community(Homebrew安装版)。MongoDB端口配置不符
代码默认连27017端口,但MongoDB实际监听的是其他端口。
解决:打开MongoDB配置文件(通常是mongod.conf)查看net.port字段,确认端口后,在Mongoose连接字符串中指定对应端口,比如:mongoose.connect('mongodb://localhost:自定义端口/数据库名')。防火墙/安全软件拦截
本地防火墙或杀毒软件阻止了Node.js访问27017端口。
解决:临时关闭防火墙/安全软件测试,若恢复正常,添加规则允许Node.js或MongoDB的端口通信。连接字符串格式错误
连接字符串写错主机地址、数据库名,或遗漏必要参数。
解决:确认格式正确,本地无认证时用简化版:mongodb://localhost:27017/你的数据库名;有认证则用mongodb://用户名:密码@localhost:27017/数据库名。MongoDB安装不完整
刚安装的MongoDB可能存在文件缺失、配置错误,导致服务无法正常启动。
解决:重新安装MongoDB,确保安装过程无报错,必要时手动初始化数据库目录:mongod --dbpath 你的数据存储路径。
内容的提问来源于stack exchange,提问作者firefly_0

