无法使用 mongoose 连接到 Mongodb Atlas
Posted
技术标签:
【中文标题】无法使用 mongoose 连接到 Mongodb Atlas【英文标题】:Unable to connect to Mongodb Atlas using mongoose 【发布时间】:2020-07-25 01:13:13 【问题描述】:我正在尝试使用节点 js 中的 mongoose 连接到在 Mongodb Atlas 中创建的集群,这样做时我遇到了以下问题。
当我使用 Mongo db atlasmongodb+srv://lm_dev_app:<password>@lmdev-q5biw.mongodb.net/test?retryWrites=true&w=majority
中给出的连接字符串时,出现以下错误
错误:queryTxt EBADNAME lmdev-q5biw.mongodb.net 在 QueryReqWrap.onresolve [as oncomplete] (dns.js:196:19) 错误号:'EBADNAME', 代码:'EBADNAME', 系统调用:'queryTxt', 主机名:'lmdev-q5biw.mongodb.net'
我无法在 Mongodb Compass 中使用此连接字符串,并且在那里遇到同样的错误。
如果我尝试使用mongodb://lm_dev_app:<password>@lmdev-shard-00-01-q5biw.mongodb.net/test
进行连接,则会出现以下错误
MongooseServerSelectionError:与 54.66.221.230:27017 的连接已关闭
但是我可以使用 Mongodb Compass 连接到每个节点,这消除了我的 ipaddress 未被列入白名单的可能性。
这是我正在使用的示例代码
const mongoosePromise = mongoose.connect("mongodb://lm_dev_app:<password>@lmdev-shard-00-01-q5biw.mongodb.net/test",
useNewUrlParser: true,
useUnifiedTopology: true,
replicaSet: "LMDEV"
, (err) =>
if (err)
console.log(err);
else
console.log("Successful");
);
关于这里发生的事情的任何想法。
【问题讨论】:
***.com/questions/60563988/… 看看这个 @kedarsedai 我已经做到了。但是我可以在同一台机器上使用 Mongodb Compass 进行连接,这表明 IP 地址没有问题。 您正在尝试将MongoDB Atlas
连接到您的`Node` 应用程序?
您是否删除了<> angle brackets
并将您的密码放在那里?
@kedarsedai 是的,我做到了。我正在尝试从我的 Node 应用程序连接到我在 Mongodb Atlas 上创建的集群。
【参考方案1】:
我需要在这里强调几件事。
Mongodb Atlas 中显示的默认连接字符串似乎是错误的。它向您显示mongodb+srv://<username>:<password>@<cluster_url>/test?retryWrites=true&w=majority
。但我使用mongodb://<username>:<password>@<node_url>:27017/
使其工作。您也可以使用mongodb://<username>:<password>@<node_url>:27017/admin
。
在我们传递的选项中传递ssl:true
。
最后可以使用 3 个选项之一连接到数据库。
一个。 const mongoosePromise = mongoose.connect("mongodb://lm_dev_app:<password>@lmdev-shard-00-01-q5biw.mongodb.net:27017/",
useNewUrlParser: true,
useUnifiedTopology: true,
authSource:"admin",
ssl: true,
, (err) =>
if (err)
console.log(err);
else
console.log("Successful");
);
b. const mongoosePromise = mongoose.connect("mongodb://lm_dev_app:<password>@lmdev-shard-00-01-q5biw.mongodb.net:27017/",
useNewUrlParser: true,
useUnifiedTopology: true,
authSource:"admin",
ssl: true,
, (err) =>
if (err)
console.log(err);
else
console.log("Successful");
);
c。 const mongoosePromise = mongoose.connect("mongodb://lm_dev_app:<password>@lmdev-shard-00-01-q5biw.mongodb.net:27017/admin",
useNewUrlParser: true,
useUnifiedTopology: true,
ssl: true,
, (err) =>
if (err)
console.log(err);
else
console.log("Successful");
);
编辑 1: 在与 Atlas 支持团队交谈后,我被告知第 1 点的问题是由于我的服务提供商的 DNS 解析问题。所以我更改了我的 DNS 设置以指向公共 DNS 服务器。
【讨论】:
天哪!你怎么能让你的连接字符串出错? @kedarsedai 我假设这是错误的,因为与 Mongodb Atlas 上提供的连接字符串相比,Mongodb Compass 构造了不同的连接字符串。 好吧,好好研究。 感谢@SachinKumar 在浪费了 12 小时后找到了您的答案。 cluster_url和node_url有什么区别?以上是关于无法使用 mongoose 连接到 Mongodb Atlas的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Mongoose 连接到 MongoDB Atlas
节点/快速应用程序无法使用mongoose连接到Mongodb Atlas