M1 Mac下Express通过Mongoose连接MongoDB报错ECONNREFUSED::1:27017
问题描述
我通过以下命令安装了MongoDB:
brew install mongodb-community@5.0
我通过以下命令启动MongoDB服务:
brew services start mongodb-community@5.0
执行brew services list命令返回结果如下:
Name Status User File emacs stopped mongodb-community started laurenz ~/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist unbound stopped
我在Express服务中使用如下代码连接MongoDB:
connectToServer: function (callback) { mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true }); const db = mongoose.connection db.on('error', (error) => { console.error(error) callback(error) }) }
打开MongoDB Compass可以正常连接MongoDB,也能查看我的数据表,相同代码在Intel架构的iMac上可以正常运行。
启动server.js时我收到如下报错:
MongooseServerSelectionError: connect ECONNREFUSED ::1:27017 at NativeConnection.Connection.openUri (/Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/connection.js:797:32) at /Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/index.js:332:10 at /Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/helpers/promiseOrCallback.js:32:5 at new Promise (<anonymous>) at promiseOrCallback (/Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/helpers/promiseOrCallback.js:31:10) at Mongoose._promiseOrCallback (/Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/index.js:1153:10) at Mongoose.connect (/Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/index.js:331:20) at Object.connectToServer (/Users/laurenz/uni_workspace/omm-project-ws2122/be/db/conn.js:16:14) at Server.<anonymous> (/Users/laurenz/uni_workspace/omm-project-ws2122/be/server.js:16:7) at Object.onceWrapper (node:events:509:28) { reason: TopologyDescription { type: 'Unknown', servers: Map(1) { 'localhost:27017' => [ServerDescription] }, stale: false, compatible: true, heartbeatFrequencyMS: 10000, localThresholdMS: 15, logicalSessionTimeoutMinutes: undefined } } MongooseServerSelectionError: connect ECONNREFUSED ::1:27017 at NativeConnection.Connection.openUri (/Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/connection.js:797:32) at /Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/index.js:332:10 at /Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/helpers/promiseOrCallback.js:32:5 at new Promise (<anonymous>) at promiseOrCallback (/Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/helpers/promiseOrCallback.js:31:10) at Mongoose._promiseOrCallback (/Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/index.js:1153:10) at Mongoose.connect (/Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/index.js:331:20) at Object.connectToServer (/Users/laurenz/uni_workspace/omm-project-ws2122/be/db/conn.js:16:14) at Server.<anonymous> (/Users/laurenz/uni_workspace/omm-project-ws2122/be/server.js:16:7) at Object.onceWrapper (node:events:509:28) { reason: TopologyDescription { type: 'Unknown', servers: Map(1) { 'localhost:27017' => [ServerDescription] }, stale: false, compatible: true, heartbeatFrequencyMS: 10000, localThresholdMS: 15, logicalSessionTimeoutMinutes: undefined } } node:internal/process/promises:246 triggerUncaughtException(err, true /* fromPromise */); ^ MongooseServerSelectionError: connect ECONNREFUSED ::1:27017 at NativeConnection.Connection.openUri (/Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/connection.js:797:32) at /Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/index.js:332:10 at /Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/helpers/promiseOrCallback.js:32:5 at new Promise (<anonymous>) at promiseOrCallback (/Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/helpers/promiseOrCallback.js:31:10) at Mongoose._promiseOrCallback (/Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/index.js:1153:10) at Mongoose.connect (/Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/lib/index.js:331:20) at Object.connectToServer (/Users/laurenz/uni_workspace/omm-project-ws2122/be/db/conn.js:16:14) at Server.<anonymous> (/Users/laurenz/uni_workspace/omm-project-ws2122/be/server.js:16:7) at Object.onceWrapper (node:events:509:28) { reason: TopologyDescription { type: 'Unknown', servers: Map(1) { 'localhost:27017' => ServerDescription { _hostAddress: HostAddress { isIPv6: false, host: 'localhost', port: 27017 }, address: 'localhost:27017', type: 'Unknown', hosts: [], passives: [], arbiters: [], tags: {}, minWireVersion: 0, maxWireVersion: 0, roundTripTime: -1, lastUpdateTime: 47955814, lastWriteDate: 0, error: MongoNetworkError: connect ECONNREFUSED ::1:27017 at connectionFailureError (/Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/node_modules/mongodb/lib/cmap/connect.js:293:20) at Socket.<anonymous> (/Users/laurenz/uni_workspace/omm-project-ws2122/be/node_modules/mongoose/node_modules/mongodb/lib/cmap/connect.js:267:22) at Object.onceWrapper (node:events:510:26) at Socket.emit (node:events:390:28) at emitErrorNT (node:internal/streams/destroy:164:8) at emitErrorCloseNT (node:internal/streams/destroy:129:3) at processTicksAndRejections (node:internal/process/task_queues:83:21) } }, stale: false, compatible: true, heartbeatFrequencyMS: 10000, localThresholdMS: 15, logicalSessionTimeoutMinutes: undefined } } Node.js v17.0.1 [nodemon] app crashed - waiting for file changes before starting...
解决方案
该问题核心原因是Node.js 17及以上版本默认优先将localhost解析为IPv6的本地地址::1,但默认安装的MongoDB仅监听IPv4的本地地址127.0.0.1,因此连接被拒绝。可选修复方案如下:
- 方案1(操作最简便):直接将连接地址中的
localhost替换为IPv4本地地址127.0.0.1,修改后的连接代码为:mongoose.connect('mongodb://127.0.0.1/test', { useNewUrlParser: true }); - 方案2:在Mongoose连接参数中添加
family: 4配置,强制使用IPv4协议解析localhost:mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true, family: 4 }); - 方案3:修改MongoDB配置使其支持IPv6连接:
- 打开MongoDB配置文件,Apple Silicon芯片Mac路径为
/opt/homebrew/etc/mongod.conf,Intel芯片Mac路径为/usr/local/etc/mongod.conf - 找到
net配置段,修改bindIp项如下:net: bindIp: 127.0.0.1, ::1 - 保存配置后重启MongoDB服务生效:
brew services restart mongodb-community@5.0
- 打开MongoDB配置文件,Apple Silicon芯片Mac路径为
内容的提问来源于stack exchange,提问作者Laurenz
相关产品推荐
相关产品推荐

