【问题标题】:MongoError: connect ECONNREFUSED 127.0.0.1:27017MongoError:连接 ECONNREFUSED 127.0.0.1:27017
【发布时间】:2018-03-13 09:29:05
【问题描述】:

我正在使用 NodeJS 和 MongoDB,使用 mongodb 包。当我运行 mongod 命令时,它工作正常并给出“等待端口 27017 上的连接”。所以, mongod 似乎正在工作。但是当我运行 node index.js 命令时,MongoClient 不起作用并给出错误-

MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]

我已经安装了 mongo db 3.4,我的代码是-

var MongoClient = require('mongodb').MongoClient;
var dburl       =   "mongodb://localhost:27017/test";
MongoClient.connect(dburl, function(err, db) {
  if (err) {
    throw err;
  }
  console.log('db connected');
  db.close();
});

我在 root 上创建了 data/db 目录并授予了写权限。 mongod.conf 文件采用 db 路径作为-

存储: dbPath: /var/lib/mongo

但似乎它实际上将 db 路径作为 data/db 而不是 var/lib/mongo

它早些时候工作,但突然停止。

【问题讨论】:

  • 进入位置 C:\Program Files\MongoDB\Server\3.4\bin 并运行 mongod.exe 并重试
  • 谢谢。但我在亚马逊 linux 服务器上。如何在那里测试?
  • 用 127.0.0.1 替换 localhost 并尝试。不确定结果,但请尝试更新我们。并尝试从终端运行以下命令,sudo service mongod start
  • 我已经试过了,没用。 sudo service mongod start 给出错误 - 启动 mongod(通过 systemctl):mongod.service 的作业失败,因为控制进程退出并出现错误代码。详见“systemctl status mongod.service”和“journalctl -xe”。
  • 我真的很惊讶有多少答案提供了 Windows 解决方案(他们甚至获得了最高评价),尽管这个问题显然是指 Linux。

标签: node.js linux mongodb


【解决方案1】:

检查 .sock 文件的位置。就我而言,它位于 /tmp 文件夹中。

然后运行以下命令。

chown mongodb:mongodb /tmp/mongodb-27017.sock

sudo systemctl start mongod

mongosh

这对我有用。

For more reference

【讨论】:

    【解决方案2】:

    我在 Windows 下使用 Node.js v17 遇到了这个问题。
    在 mongoose github 上找到了问题,并提供了一些解决方案:https://github.com/Automattic/mongoose/issues/10917

    我必须要么在 mongoose.connect 函数中使用 127.0.0.1 而不是 localhost,这很有效。

    使用管理员权限记事本编辑配置文件。打开admin cmd,进入C:\Program Files\MongoDB\Server\5.0\bin文件夹,输入命令notepad mongod.cfg然后编辑:

    net:
      port: 27017
      ipv6: true
    

    我不得不删除bindIp: 127.0.0.1,只留下端口和ipv6,否则即使使用ipv6: true,数据库也无法连接。 然后用windows任务管理器->services->mongodb重启mongodb服务,使用localhost就可以了。

    显然使用mongod://0.0.0.0:27017/ 不安全:mongodb.conf bind_ip = 127.0.0.1 does not work but 0.0.0.0 works

    【讨论】:

      【解决方案3】:

      我自己调试了同样的错误超过 5 个小时。最终它对我有用。以下是在使用 Mongoose 之前确保它们正确无误的项目清单。

      • MongoDB 已安装在您的系统上
      • 在您使用“npm run start”之前,MongoDB 正在作为服务运行
      • 猫鼬代码没有任何语法错误
      • 在 mongoose 的连接函数中使用 promises (.then())
      • 如果您在 URL 中使用“localhost”,请尝试使用“0.0.0.0”切换它,反之亦然

      完成所有这些后,运行命令“node run start”,希望现在可以正常工作。要验证,请转到 mongoDB 并查看新创建的数据库。

      以下是对我有用的 MongoDB 和 Mongoose 示例代码。

      const mongoose = require('mongoose');
      
      const myFunc = () => {
          const userSchema = mongoose.Schema({
              name: String
          });
      
          const User = mongoose.model("User", userSchema);
      
          const userObject = new User({
              name: 'Abhishek'
          });
      
          userObject.save((err, data) => {
              if (err)
                  console.log('Error in saving = ' + err);
              if (data)
                  console.log('Saved to DB = ' + data)
          }
          );
      };
      
      mongoose
          .connect("mongodb://0.0.0.0/userdb")
          .then(myFunc(), err => console.log(`Error = ${err}`));
      
      

      【讨论】:

        【解决方案4】:

        从 Nodejs 14 升级到 17 后,我的应用程序停止运行。

        我得到的错误是

        MongoServerSelectionError: connect ECONNREFUSED ::1:27017
        

        解决方案只是将localhost 替换为0.0.0.0。 IE。在我的源代码中我不得不改变

        const uri = "mongodb://localhost:27017/";
        const client = new MongoClient(uri);
        

        const uri = "mongodb://0.0.0.0:27017/";
        const client = new MongoClient(uri);
        

        我将其发布为答案,因为我在 Internet 上的任何地方都找不到解决方案,而且我在这个问题上浪费了很多时间...

        【讨论】:

        • MongoDB 似乎与 NodeJS v17 不兼容。默认情况下它应该在 IPv6 "::1" 上侦听,并且可以在 v17 上正常工作。
        【解决方案5】:

        我刚刚在互联网上找到了一个解决方案, 如果您使用的是最新的 nodejs (v17.x),请尝试将 mongodb url 从 localhost 更新为 127.0.0.1

        参考:https://www.mongodb.com/community/forums/t/mongooseserverselectionerror-connect-econnrefused-127-0-0-1-27017/123421/3

        【讨论】:

        • 拯救了我的一天,谢谢
        【解决方案6】:

        如果您使用 WSL 并尝试从 Windows 访问 MongoDB,那么您必须安装 Mongo for WSL。

        【讨论】:

          【解决方案7】:

          在您的设备中搜索 services.msc 并点击开始运行 mongoDB 服务器

          在开始运行 MongoDB 服务器后,您就可以运行您的程序了

          【讨论】:

            【解决方案8】:

            对于 Windows 用户: Mongo 4.4 版 使用以下命令: NET STOP MONGODB – 停止 MongoDB 作为服务,如果返回“mongoDb 服务未运行,则使用以下命令启动服务” NET START MONGODB – 将 MongoDB 作为服务启动。

            这对我有用。

            【讨论】:

              【解决方案9】:

              在 Mac 上我必须运行 brew services start mongodb-community@4.4

              检查:Install MongoDB Community Edition on macOS

              【讨论】:

                【解决方案10】:

                只需从终端启动 mongo 服务器

                Ubuntu -

                     sudo systemctl start mongod
                

                【讨论】:

                • thx 哑光。就我而言,我忘记以sudo 运行它。
                • 解决了我在 Ubuntu 20 上的问题
                【解决方案11】:

                适用于 Windows 用户

                发生这种情况是因为 MondgDB 服务器已停止。 你可以解决这个问题,

                1. 1 搜索服务,使用左下角进行搜索 搜索选项。

                  2 然后有一个名为“服务”的齿轮图标。

                  3 点击后会出现一个包含大量服务的窗口

                  4向下滚动,你会发现'MongoDB服务器(MongoDB)'。

                  5 这样你就会看到有一个启动服务的选项。

                  6 开始吧。

                2. 1 然后打开你的命令提示符。

                  2种mongod

                现在您可以连接到您的服务器了。

                如果您的 sql server 服务关闭,此步骤也可以正常工作。 (查找sql​​ server服务)

                【讨论】:

                • 谢谢,为我工作。我刚开始这个选项'MongoDB服务器(MongoDB)
                【解决方案12】:

                我今天遇到了同样的问题..并且一直在寻找答案..我在 Ubuntu 上...但是,我找不到适用于该线程的正确问题..经过大量研究,以下内容适用我终于!! :)

                先运行后

                mongod dbpath
                

                如果出现 mongodb 正在寻找我安装的 mongodb 应用程序中缺少的 data/db 目录.. 所以我运行了以下命令:

                $ sudo mkdir -p /data/db
                

                然后运行,

                $ sudo chown -R $USER /data/db
                

                chown - 更改文件/目录的所有权。 IE。文件/目录的所有者更改为指定的所有者,但不会修改权限。详见此处:https://unix.stackexchange.com/questions/402062/how-are-chown-and-chmod-command-different-in-the-given-operation

                最后,运行

                `$ sudo systemctl enable mongod.service
                

                它会给出一条消息:Created symlink /etc/systemd/system/multi-user.target.wants/mongod.service → /lib/systemd/system/mongod.service 并启动服务。

                【讨论】:

                  【解决方案13】:

                  如果你已经安装了“MongoDB”,如果不小心退出了MongoDB服务器,那么“重启你的系统”。

                  这个方法解决了我...

                  [仅在 Windows 上]

                  还有另一种方法:

                  按下:

                  Windows + R
                  

                  类型:

                  services.msc
                  

                  然后单击“确定”,它会打开 “服务”窗口,然后在列表中搜索“MongoDB 服务器”。 找到“MongoDB Server”后,右键单击,在弹出的菜单中选择“开始”。

                  MongoDb 服务器将开始运行。

                  希望它有效!

                  【讨论】:

                    【解决方案14】:

                    在我的特定实例中,我连接到一个 VPN,它以某种方式阻止了 localhost 与 MongoDB 的连接。当我断开我的 VPN 时它起作用了。这是一个特殊情况,但很高兴知道。因此,任何阻碍您的网络连接的东西,都可以解决。

                    【讨论】:

                      【解决方案15】:

                      我在 Windows 10 上遇到了同样的问题。我只是卸载了 MongoDB 并再次安装它,它就开始工作了。它解决了我的问题。

                      【讨论】:

                      • 最好像其他朋友一样评论你的简短答案和想法
                      • 这是因为服务被禁用了。只需打开服务 > 启用并启动 mongod 服务。您可以使用命令行实现相同的目的。只需查阅文档以了解确切的语法。
                      【解决方案16】:

                      按 CTRL+ALT+DELETE/task manager ,然后转到 services ,找到 MongoDB ,右键单击它。开始。回到终端。 npm start 它会起作用。

                      【讨论】:

                        【解决方案17】:

                        因为您在尝试启动 mongo shell 之前没有启动 mongod 进程。

                        启动mongod服务器

                        mongod
                        

                        打开另一个终端窗口

                        启动 mongo shell

                        mongo
                        

                        【讨论】:

                        • 这仅适用于windows机器
                        【解决方案18】:

                        解决方案是从以下位置安装 MongoDB: https://www.mongodb.com/download-center/community

                        【讨论】:

                        • 点评来源: 嗨,这篇文章似乎没有为问题提供quality answer。请编辑您的答案以解释您的解决方案为何有效,或者将其作为对该问题的评论发布。
                        【解决方案19】:

                        如果您是 Windows 用户,请右键单击开始并打开 Windows Powershell(以管理员身份运行)。然后输入

                        mongod
                        

                        就是这样。 您的数据库肯定会连接上!

                        【讨论】:

                        • 他已经说过他不是windows用户,并且在Amazon linux实例上。
                        【解决方案20】:

                        我有同样的错误,因为我没有安装 mongoDB。 确保你已经安装了 mongodb,如果没有,你可以从这里下载它https://www.mongodb.com/download-center/community

                        【讨论】:

                        • 如果你已经安装了它,但仍然有问题,你忘了启动服务
                        • "install mongodb" 肯定不是答案...发布此内容的人是 MongoDB 的用户。
                        【解决方案21】:

                        对于 Ubuntu 用户运行 sudo systemctl restart mongod

                        【讨论】:

                          【解决方案22】:

                          请确保您的 mongo DB 设置为自动并在控制面板/管理工具/服务中运行,如下所示。这样您就不必每次都手动启动 mongod.exe。

                          【讨论】:

                          • 这与 OPs 问题无关。
                          【解决方案23】:

                          我完全忘了启动 MongoDB。 转到终端中的单独选项卡并输入:

                          sudo service mongod start
                          

                          【讨论】:

                            【解决方案24】:

                            我有以下错误:

                            Error: connect ECONNREFUSED 127.0.0.1:27017
                            

                            在我的例子中,出现这个问题是因为根本没有安装 MongoDB。

                            解决方案是从以下位置安装 MongoDB:
                            https://www.mongodb.com/download-center/community

                            安装后ECONNREFUSED错误不再出现。

                            希望对您有所帮助。

                            【讨论】:

                              【解决方案25】:

                              您可能需要在运行节点服务器时继续运行您的数据库进程(通过运行mongod)。

                              【讨论】:

                                【解决方案26】:

                                这可能是因为 MongoDB 服务没有启动。请按照以下步骤启动它:

                                1. 进入控制面板并点击管理工具
                                2. 双击服务。将打开一个新窗口。
                                3. 搜索 MongoDB.exe。右键单击它并选择开始

                                服务器将启动。现在再次执行npm start,这次代码可能会工作。

                                【讨论】:

                                • 对于 windows 10 路径是控制面板\系统和安全\管理工具
                                • 你救了我的命
                                【解决方案27】:

                                很可能您的 mongo db 服务没有启动。 对于 ubuntu:sudo service mongod start 对于 windows:转到服务并启动 MongoDB 服务

                                同时安装 mondoDB 服务的链接https://www.mongodb.com/download-center/community

                                我遇到了这个问题,感谢这个人的回答https://*.com/a/47433551/7917608

                                【讨论】:

                                  【解决方案28】:

                                  我在 Windows 上遇到了同样的问题。

                                  Ctrl+C关闭mongod,重新启动mongod。

                                  我不确定,但似乎最初 mongod 正在打开和关闭连接。然后,它无法关闭一些较早的连接并达到打开的限制。重启mongod后,又能正常工作了。

                                  【讨论】:

                                    【解决方案29】:

                                    对于 windows - 只需转到 Mongodb 文件夹 (例如:C:\ProgramFiles\MongoDB\Server\3.4\bin)并在文件夹中打开 cmd 并键入 "mongod.exe --dbpath c:\data\db"

                                    如果 c:\data\db 文件夹不存在,则自行创建并再次运行上述命令。

                                    现在一切都应该正常了。))

                                    【讨论】:

                                    • @nikhilsugandh - 真的吗?屏幕截图清楚地显示了 Linux 环境,而不是 Windows。
                                    【解决方案30】:

                                    尝试通过使用 mongod 提供 --dbpath 来启动 mongoDB 服务器。

                                    sudo mongod --dbpath /var/lib/mongo/data/db &
                                    
                                    最后的

                                    '&' 将在您的服务器上启动 mongodb 服务器作为服务。

                                    希望它有效。

                                    【讨论】: