带有 Node.js 连接错误的 MongoDB (Mongoose) - 寻找洞察力

Posted

技术标签:

【中文标题】带有 Node.js 连接错误的 MongoDB (Mongoose) - 寻找洞察力【英文标题】:MongoDB (Mongoose) with Node.js connection errors - Looking for insight 【发布时间】:2020-09-26 11:30:14 【问题描述】:

我是 node.js 和 mongoDB Atlas 的新手。我在使用 Node.js 3.0 版或更高版本的连接字符串连接到 Mongo Atlas 时遇到问题。

const MongoDB = 'mongodb+srv://<user>:<password>@cluster0-nnezr.mongodb.net/<dbname>?retryWrites=true&w=majority'

当我使用此连接字符串时,我收到以下错误 -

MongoDB 连接错误:错误:querySrv ETIMEOUT _mongodb._tcp.cluster0-nnezr.mongodb.net 在 QueryReqWrap.onresolve [as oncomplete] (dns.js:203:19) 错误号:未定义, 代码:'ETIMEOUT', 系统调用:'querySrv', 主机名:'_mongodb._tcp.cluster0-nnezr.mongodb.net' (节点:38809)UnhandledPromiseRejectionWarning:错误:querySrv ETIMEOUT _mongodb._tcp.cluster0-nnezr.mongodb.net 在 QueryReqWrap.onresolve [as oncomplete] (dns.js:203:19) (使用node --trace-warnings ... 显示警告的创建位置) (节点:38809)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数,或拒绝未使用 .catch() 处理的承诺。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志 --unhandled-rejections=strict(请参阅 https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝编号:1) (节点:38809)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

我找到了使用 node.js 版本 2.2.12 的先前连接字符串的解决方法 -

mongodb://<user>:<password>@cluster0-shard-00-00-nnezr.mongodb.net:27017,cluster0-shard-00-01-nnezr.mongodb.net:27017,cluster0-shard-00-02-nnezr.mongodb.net:27017/<dbname>?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true&w=majority

连接时我必须添加 useUnifiedTopology: true

mongoose.connect(mongoDB,  useNewUrlParser: true, useUnifiedTopology: true );

谁能告诉我我对新连接字符串做错了什么?

谢谢!

【问题讨论】:

您使用的是 .env 文件吗?尝试编写 useNewUrlParser: true, useFindAndModify: false, useUnifiedTopology: true 不使用 .env 文件。尝试添加 useFindAndModify: false 但仍然出现相同的错误 【参考方案1】:

有写用户,密码,也许还有数据库,

   const MongoDB = 'mongodb+srv://<user>:<password>@cluster0-nnezr.mongodb.net/<dbname>?retryWrites=true&w=majority'

user = 你的 mongodb 用户名

password = 你的 mongodb 密码

dbname = 数据库名称

别忘了在 MongoDB atlas 中创建一个新用户。

【讨论】:

这不用说你做对了吗? XD 以为他错过了那些领域。 是的,这不是问题=D 我没有故意在问题中包含我的用户名和密码或数据库名称。 是的,但是 XD 向我们展示了代码,因为我看不到问题

以上是关于带有 Node.js 连接错误的 MongoDB (Mongoose) - 寻找洞察力的主要内容,如果未能解决你的问题,请参考以下文章

如何在 node.js 和 mongoDB 本机驱动程序上启用调试?

带有 Node.JS 的 MongoDB:$where 子句性能

带有 Node Js 的 Mongodb

node.js使用经验记录

如何在 node.js 中重用 mongodb 连接

node.js如何配置mongodb连接池?