【问题标题】:UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkErrorUnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError
【发布时间】:2018-10-04 19:50:40
【问题描述】:

我尝试运行以下命令:

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.

我不确定为什么会收到此错误。有人可以建议怎么做吗?

【问题讨论】:

    标签: javascript node.js mongodb express handlebars.js


    【解决方案1】:

    如果您是 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

    它有效。

    【讨论】:

      【解决方案2】:

      MongoDB 连接要求您输入 URL 编码的密码。但是当我有一个带“。”的密码时。 (xxx.xxx),其 url 编码保持为点。但是,它仍然没有工作。 我将密码更改为简单的全小写字符串,它工作正常。

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

      【讨论】:

        【解决方案3】:

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

        我希望它对你有用。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 请提供一些命令或放一些截图以便更好地理解,
          • @Haroon 你在说什么?
          【解决方案5】:

          我遇到了同样的问题,并通过将数据库用户的用户名和密码更改为更简单的东西(如 dev:dev 来解决,我在使用 user-dev:user 时遇到了错误) -dev ...只需将其更改为简单的东西

          【讨论】:

            【解决方案6】:

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

            sudo service mongod start

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

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                【解决方案8】:

                如果您使用的是 mongoDB.Atlas,请转到网络访问并设置白名单条目:0.0.0.0/0。

                重新运行您的命令。

                【讨论】:

                  【解决方案9】:

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

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

                  【讨论】:

                  • 嘿@compileRavi,我编辑了问题以使其更清晰。这就是你想要表达的吗?
                  【解决方案10】:

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

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

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

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

                  【讨论】:

                    【解决方案11】:

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

                    mongo
                    

                    或者对于 macOS:

                    mongod
                    

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

                    【讨论】:

                    • 在终端上运行 mongod 和 mongo 确实解决了这个问题。谢谢。但是,在我的另一台 Mac 笔记本电脑上,我不必运行这两个命令。我只是想知道为什么。
                    • 你真的跑过一次的原因。如果您只是直接关闭终端,那么服务器仍将保持在后台,直到您重新启动计算机
                    猜你喜欢
                    • 2020-02-06
                    • 2020-12-07
                    • 1970-01-01
                    • 2020-11-03
                    • 2020-05-12
                    • 1970-01-01
                    • 1970-01-01
                    • 2022-11-23
                    • 2018-10-14
                    相关资源
                    最近更新 更多