【问题标题】:MongoDB atlas connection fails with error MongoServerSelectionError: connection <monitor> to 52.64.0.234:27017 closedMongoDB atlas 连接失败并出现错误 MongoServerSelectionError: connection <monitor> to 52.64.0.234:27017 closed
【发布时间】:2020-10-02 04:35:46
【问题描述】:

我已经建立了一个 mongodb Atlas 免费层集群。当我尝试使用 node js 连接到它时,它会引发错误。我已经手动和选择当前将我的 IP 列入白名单。我也尝试将 +srv 添加到我的连接网址,但这只会导致更多错误。

这是我尝试连接的节点 js 代码

const { MongoClient } = require("mongodb");                                                                                                                                       

const url = "mongodb://user1:password1!@cluster0-shard-00-00-bc7dh.mongodb.net/test?retryWrites=true&w=majority&useNewUrlParser=true&useUnifiedTopology=true";

const client = new MongoClient(url);

async function run() {
    try {
        await client.connect();
        console.log("Connected correctly to server");

    } catch (err) {
        console.log(err.stack);
    }
    finally {
        await client.close();
    }
}

run().catch(console.dir);

这是我得到的错误

MongoServerSelectionError:与 52.64.0.234:27017 的连接已关闭 在 Timeout._onTimeout (C:\Users\YOUNG\node_modules\mongodb\lib\core\sdam\topology.js:430:30) 在 listOnTimeout (internal/timers.js:549:17) 在 processTimers (internal/timers.js:492:7)

有类似问题的人可以通过将他们的 IP 地址列入白名单来解决它,但它对我不起作用。可能是什么问题?

我尝试允许所有 ip 访问,但错误仍然存​​在,当我将 uri 与 +srv 一起使用时,我收到以下错误

MongoServerSelectionError: Authentication failed.
at Timeout._onTimeout (C:\Users\YOUNG\node_modules\mongodb\lib\core\sdam\topology.js:430:30)
at listOnTimeout (internal/timers.js:549:17)
at processTimers (internal/timers.js:492:7)

【问题讨论】:

  • 以防万一尝试允许所有带有通配符IP的IP:0.0.0.0
  • 你试过mongodb+srv://协议了吗?
  • 我已经尝试了上述两个建议,但仍然出现上述相同的错误

标签: javascript mongodb mongodb-atlas


【解决方案1】:

这是因为您的 IP 地址未列入白名单。 转到项目中 mongodb 地图集中的 network accessADD IP ADDRESS 。仅测试从任何地方添加访问权限选项 你回去再用连接字符串再试一次。

【讨论】:

    【解决方案2】:

    在 MongoDB 中的集群中访问您的网络访问

    【讨论】:

      【解决方案3】:

      您在连接字符串中缺少tls=true URI 选项。

      您还应该使用 Atlas 默认提供的 SRV URI,它会处理这个问题。

      【讨论】:

      • 当我使用 srv uri 时,我得到一个 ENOTFOUND 错误,当我添加 tls=true 选项时,我得到一个身份验证错误。
      • 如果您遇到错误,请随时更新您的问题。对于身份验证错误,请在您的 atlas 部署中创建一个数据库用户。
      • 我添加了一个具有读写权限的新用户,但身份验证错误仍然存​​在
      • 权限不影响认证是否成功。您提供的信息不足以诊断身份验证问题。
      • 您用于添加用户的确切步骤,您的确切 URI 和密码已编辑。 docs.atlas.mongodb.com/security-add-mongodb-users
      【解决方案4】:

      在mongo db中进入网络访问并添加IP地址0.0.0.0,一切都会好起来的。

      【讨论】:

        【解决方案5】:
        const client = new MongoClient(uri, 
        {
        useNewUrlParser: true,
        useUnifiedTopology: true,
        });
        client.connect(() =>
        {
        your_collection = client.db('your_db_name').collection('collection_name')
        })
        

        这对我有用。

        【讨论】:

        • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 2022-07-05
        • 2021-06-22
        • 2020-07-06
        • 1970-01-01
        • 2022-11-19
        • 2023-04-09
        • 2020-09-16
        • 2019-03-18
        相关资源
        最近更新 更多