【问题标题】:MongooseServerSelectionError: connect ECONNREFUSED ::1:27017MongooseServerSelectionError: 连接 ECONNREFUSED ::1:27017
【发布时间】:2021-12-18 18:09:38
【问题描述】:

当我尝试使用 Mongoose 将我的应用程序与我的数据库连接时遇到问题。已经尝试了我在 google 上找到的以下解决方案:

  • 在 windows 上重启 MongoDB 服务
  • 使用位于 mongodb 的 bin 文件中的 cmd 手动打开 db

但我无法解决它。谁能帮帮我?

//my connection
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/notes-db-app',{
    useNewUrlParser: true, 
    useUnifiedTopology: true
})
.then(db => console.log('DB is connected'))
.catch(err => console.log(err));

抛出的是我,这个错误

MongooseServerSelectionError: 连接 ECONNREFUSED ::1:27017 在 NativeConnection.Connection.openUri (C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\connection.js:797:32) 在 C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\index.js:330:10 在 C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib \helpers\promiseOrCallback.js:32:5 在新的承诺 () 在 promiseOrCallback (C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\helpers\promiseOrCallback.js:31:10) 在 Mongoose._promiseOrCallback (C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\index.js:1151:10) 在 Mongoose.connect (C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\index.js:329:20) 在对象。 (C:\Users\ivan\Desktop\NodeJS\notes-app\src\db.js:3:10)
在 Module._compile (node:internal/modules/cjs/loader:1095:14) 在 Object.Module._extensions..js (node:internal/modules/cjs/loader:1147:10) {
原因:拓扑描述 { 类型:'未知', 服务器:Map(1) { 'localhost:27017' => [ServerDescription] }, 陈旧:虚假, 兼容:真实, heartbeatFrequencyMS: 10000, 本地阈值MS:15, 逻辑会话超时分钟:未定义 } }

我尝试像这样将端口放在我的连接代码上

//my connection
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/notes-db-app',{
    useNewUrlParser: true, 
    useUnifiedTopology: true
})
.then(db => console.log('DB is connected'))
.catch(err => console.log(err));

这又给我带来了另一个错误

MongooseServerSelectionError:无效的消息大小:1347703880,允许的最大值:67108864 在 NativeConnection.Connection.openUri (C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\connection.js:797:32) 在 C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\index.js:330:10 在 C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib \helpers\promiseOrCallback.js:32:5 在新的承诺 () 在 promiseOrCallback (C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\helpers\promiseOrCallback.js:31:10) 在 Mongoose._promiseOrCallback (C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\index.js:1151:10) 在 Mongoose.connect (C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\index.js:329:20) 在对象。 (C:\Users\ivan\Desktop\NodeJS\notes-app\src\db.js:3:10)
在 Module._compile (node:internal/modules/cjs/loader:1095:14) 在 Object.Module._extensions..js (node:internal/modules/cjs/loader:1147:10) {
原因:拓扑描述 { 类型:'未知', 服务器:Map(1) { 'localhost:3000' => [ServerDescription] }, 陈旧:虚假, 兼容:真实, heartbeatFrequencyMS: 10000, 本地阈值MS:15, 逻辑会话超时分钟:未定义 } }

【问题讨论】:

标签: javascript node.js mongodb mongoose


【解决方案1】:
const uri = 'mongodb://localhost:27017/test';

const options = {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    serverSelectionTimeoutMS: 5000,
    autoIndex: false, // Don't build indexes
    maxPoolSize: 10, // Maintain up to 10 socket connections
    serverSelectionTimeoutMS: 5000, // Keep trying to send operations for 5 seconds
    socketTimeoutMS: 45000, // Close sockets after 45 seconds of inactivity
    family: 4 // Use IPv4, skip trying IPv6
}

const connectWithDB = () => {
    mongoose.connect(uri, options, (err, db) => {
      if (err) console.error(err);
      else console.log("database connection")
    })
}

connectWithDB()

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

可能您要连接的服务器的主机名/IP 设置不正确。
我习惯于将该错误视为:

MongooseServerSelectionError: connect ECONNREFUSED <hostname/hostIP>:<port>

在您发布的控制台日志中,&lt;hostname/hostIP&gt; 部分格式错误/丢失。

示例 - 对于在端口 27017本地 运行的 mongodb 服务器,这是服务器关闭时的错误:

MongooseServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017

如果您使用 mongodb URI 连接到数据库,请确保它看起来像这样

"mongodb://<hostname/hostIP>:<port>"

【讨论】:

    【解决方案3】:

    我终于解决了。

    启用 MongoDB 默认禁用的 IPV6。在 CMD 上使用以下命令行:

    mongod --ipv6 
    

    然后再试一次连接就可以了!

    const mongoose = require('mongoose');
    
    mongoose.connect('mongodb://localhost/notes-db-app',{
        useNewUrlParser: true, 
        useUnifiedTopology: true
    })
    .then(db => console.log('DB is connected'))
    .catch(err => console.log(err));
    

    代表提问者发帖

    【讨论】:

      【解决方案4】:

      只需传递第三个参数family:4即。

      mongoose.connect('mongodb://localhost/notes-db-app',{
          useNewUrlParser: true, 
          useUnifiedTopology: true,
          family: 4,
      })
      

      【讨论】:

        猜你喜欢
        • 2021-04-15
        • 1970-01-01
        • 2023-04-09
        • 2020-10-27
        • 2021-09-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-13
        相关资源
        最近更新 更多