繁体   English   中英

UnhandledPromiseRejectionWarning: MongoNetworkError: 在第一次连接时无法连接到服务器 [localhost:27017] [MongoNetworkError]

[英]UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError

我尝试运行以下命令:

node index.js

但是,我从我的终端得到以下信息:

    success connection to port 3000
(node:16767) UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError
: connect ECONNREFUSED 127.0.0.1:27017]
    at Pool.<anonymous> (/Users/hatchery/Documents/nodejs/fxexpress/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/server.js:503:11
)
    at emitOne (events.js:116:13)
    at Pool.emit (events.js:211:7)
    at Connection.<anonymous> (/Users/hatchery/Documents/nodejs/fxexpress/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:326:12)
    at Object.onceWrapper (events.js:317:30)
    at emitTwo (events.js:126:13)
    at Connection.emit (events.js:214:7)
    at Socket.<anonymous> (/Users/hatchery/Documents/nodejs/fxexpress/node_modules/mongoose/node_modules/mongodb-core/lib/connection/connection.js:245:50)
    at Object.onceWrapper (events.js:315:30)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at emitErrorNT (internal/streams/destroy.js:64:8)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
(node:16767) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:16767) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

我不确定为什么会收到此错误。 任何人都可以建议该怎么做?

如果您使用的是 mongoDB.Atlas,请转到网络访问并设置白名单条目:0.0.0.0/0。 在此处输入图片说明

在此处输入图片说明

重新运行您的命令。

虽然上述解决方案可能有效,但最好了解如何调试以及错误内容。

您得到了UnhandledPromiseRejectionWarning ,因为在您的代码中,您不能处理连接到 MongoDB 的承诺拒绝情况。

接下来,节点服务器连接到mongodb失败。 这可能是由于几个原因。 @Sayegh 提到的一种简单情况,服务器本身没有运行。 可能是其他原因,例如错误的端口等,服务器不接受传入连接等。

如何调试。 第一步是确定进程是否正在运行。 一种简单的方法是运行此命令ps aux | grep mongo ps aux | grep mongo以文本形式列出所有用户的所有进程。 如果这是真的但仍然无法连接,请查找端口。 如果仍然无法连接,请检查服务器是否接受传入连接并从那里获取。

不确定您使用的是什么系统,但如果您使用的是 Linux,请尝试运行它:

mongo

或对于 macOS:

mongod

并让它在新终端中运行,然后再次尝试运行服务器

在启动 NodeJS 命令之前,请确保使用正确的权限创建正确的目录:

> sudo mkdir -p /data/db
> sudo chmod -R go+w /data/db

我遇到了同样的问题,并通过将数据库用户的用户名和密码更改为更简单的东西(如dev:dev)来解决,并且我在将其与user-dev:user-dev一起使用时出错了……只需将其更改为简单的内容即可

首先我尝试了Skitty的解决方案,它对我不起作用,但我仍然将解决方案保留在我的代码中,然后我更改了app.listen(process.env.PORT || 3000); 它对我有用。

我遇到了同样的问题,但经过大量 RND。 我发现问题出在哪里,所以在你的终端上运行这个命令。

须藤服务 mongod 开始

然后在终端上运行mongo并查看。

只需修复系统中安装的 mongodb。 通过单击您安装的软件包,您将可以选择修复它。

如果您使用的是 Mongo db atlas,请继续网络访问并设置为您当前的 IP 地址,然后重新运行您的命令。

我希望它对你有用。

在此处输入图片说明

MongoDB 连接要求您输入 URL 编码的密码。 但是当我有一个带有 '.' 的密码时 (xxx.xxx), url 编码保留为点。 但是,它仍然不起作用。 我将密码更改为简单的所有小写字符串,并且工作正常。

不知道为什么它不接受。 但这暂时解决了问题。

如果您是 Mac 用户,这可能是相关评论。 对我来说这是因为服务器没有运行。 在运行mongodb ,我在控制台中看到一条消息,说没有/data/db并且 / 对我来说是不可写的。 所以我使用了synthetic.conf 解决方案。

  1. sudo mkdir -p /System/Volumes/Data/data/db
  2. sudo chown -R whoami /System/Volumes/Data/data/db`

  3. echo "data\\t/System/Volumes/Data/data" | sudo tee -a /etc/synthetic.conf
  4. 重启你的系统
  5. 运行mongodb

它有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM