You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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连接:
    1. 打开MongoDB配置文件,Apple Silicon芯片Mac路径为/opt/homebrew/etc/mongod.conf,Intel芯片Mac路径为/usr/local/etc/mongod.conf
    2. 找到net配置段,修改bindIp项如下:
      net:
        bindIp: 127.0.0.1, ::1
      
    3. 保存配置后重启MongoDB服务生效:
      brew services restart mongodb-community@5.0
      

内容的提问来源于stack exchange,提问作者Laurenz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:24:10