【发布时间】: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} 但仍然出现相同的错误
标签: javascript node.js database mongodb mongoose