MongoNetworkError:在第一次连接时无法连接到服务器[localhost:27017] [MongoNetworkError:connect ECONNREFUSED 127.0.0.1:27017]。

83

我是nodeJS的新手,通过观看YouTube上的教学视频开始学习。一切都很顺利,直到我添加了与mongodb连接的函数。

mongo.connect("mongodb://localhost:27017/mydb")

当我在CMD上运行我的代码(node start-app),出现以下错误:

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

有人能解释一下我错过了哪个步骤吗? 我的代码:
var express = require("express");
var MongoClient = require('mongodb');
var url = "mongodb://localhost:27017/mydb";
var webService = require("./webService");
var server = express();

MongoClient.connect(url, function (err, db) {
    if (err) throw err;
    console.log("Database created!");
    db.close();
});

server.use(express.urlencoded({ extended: true }));

server.set('views', __dirname);

server.get('/', function (request, response) {
    response.sendFile(__dirname + '/MainPage.html');
});

server.get('/Sign', function (request, response) {
    response.render(__dirname + '/Sign.ejs');
});

server.post("/signUp", webService.signUp);

server.post("/createUser", webService.createUser);

server.listen(5500);

3
你可能已经安装了 MongoDB,但它肯定没有在运行。在做任何其他操作之前,请确保检查安装说明并确保能够从 mongo shell 连接。并且清楚地说一下,我们讨论的不是 npm install mongodb。我们正在谈论实际上为你的平台“安装服务器”。 - Neil Lunn
如果您是通过.msi安装程序安装MongoDB的,请打开该软件并选择“修复”而不是“安装”,然后再尝试一次,这对我很有效。 - lliance
34个回答

62

首先,在您的系统中安装并启动 MongoDB 数据库服务器。

使用以下链接来安装 MongoDB

https://docs.mongodb.com/manual/installation/

如果您已经安装了 MongoDB,请检查服务器处于哪种状态(启动/停止)。尝试通过mongo shell客户端进行连接。


55

许多人不会添加此选项,特别是在AWS EC2实例中。我曾经遇到过同样的问题并尝试了不同的解决方案。 解决方法:我的代码中有一个数据库URL缺少了参数“authSource”,加上这个参数后问题得以解决。

mongodb://myUserName:MyPassword@ElasticIP:27017/databaseName?authSource=admin

7
这拯救了我的生命...我已经试图解决这个问题好几天了。?authSource=admin 就是解决问题的关键!!! - Ren44
1
这是authSource的含义:https://dev59.com/ZlkR5IYBdhLWcg3w7xhc - user7075574

17

我遇到了同样的问题,经过一番研究,发现可以通过在终端上运行该命令来解决这个问题。

sudo service mongod start

然后在终端上运行mongo


14

按照 @CoryM 在上面的答案所述的逻辑:

尝试了Google在Stack Overflow上提供的所有解决方案后,我找到了我的特定问题所在。很久以前,我编辑了我的hosts文件,以便从我的虚拟机访问localhost。

删除此条目对我有用...

我也在两个月前为Python Machine Learning设置编辑了我的hosts文件。因此,我没有删除它,因为我仍然需要它,而是使用127.0.0.1代替localhost,这样就行了:

mongoose.connect('mongodb://127.0.0.1/testdb')

工作!谢谢:DB_STRING=mongodb://127.0.0.1/<db_name> - undefined

12

在尝试了谷歌在堆栈溢出上提供的所有解决方案后,我找到了我特定问题的原因。很久以前我编辑了我的hosts文件,以便从我的virtualbox访问本地主机。

删除此条目解决了我的问题,同时还应正确安装来自上述解决方案给出的mongoDB,并包括正确的Promise处理代码:

mongoose.connect('mongodb://localhost/testdb').then(() => {
console.log("Connected to Database");
}).catch((err) => {
    console.log("Not Connected to Database ERROR! ", err);
});

9

您的IP地址可能已更改。

如果您最近重新启动了调制解调器,那么您的IP地址就会更改,而该地址可能已被列入Atlas的白名单中。

所以,您需要返回Atlas并在“安全性>网络访问”下添加您的新IP地址到白名单中。


Atlas是MongoDB的云服务,与localhost完全相反。 - Wernfried Domscheit

4

我曾经遇到过这种情况,后来发现是因为网络连接有问题。如果我使用公共wifi连接,由于安全原因会被阻止访问一些网站,所以Mongo无法连接。但是如果我使用自己的移动数据连接,就可以连接到数据库。


3
如果你在安全性 > 网络访问 > IP白名单下将你的IP地址加入白名单,然后尝试从不同的IP地址连接,Mongo会阻止连接。这是一项安全功能,以确保只有受信任的IP地址才能连接到数据库。你只需要前往Mongo DB Atlas网站上述部分,将你当前的IP地址(永久或临时)添加到白名单中,或者暂时允许从任何地方访问(即使用0.0.0.0/0来代表所有IP地址)。出于明显的安全原因,不建议永久允许来自任何位置的访问。 - mepley
当您按照问题中所给的方式连接到localhost(或127.0.0.1)时,您根本不需要任何互联网连接。 - Wernfried Domscheit

4
您可以通过运行以下命令来检查错误的详细信息: sudo service mongod status 如果错误类似于以下内容:
- 无法取消链接socket文件 /tmp/mongodb-27017.sock,未知错误 - 致命断言40486位于src/mongo/transport/transport_layer_asio.cpp 670处
只需运行以下命令即可解决问题: rm /tmp/mongodb-27017.sock

我该怎么做才能避免这种情况发生? - Shalabyer

3

我通过升级mongoose的主要版本来解决了这个问题:

在执行此操作之前,请确保(使用mongo shell)您拥有正确的URL并且在该URL上可用运行mongo服务器,并且问题仍然存在。

   "dependencies": {
-    "mongoose": "^5.4.13",
+    "mongoose": "^6.2.4",
   }

为什么这与问题无关呢?因为它解决了这个问题。你可能想知道它是如何解决问题的?很少有人会觉得浪费时间详细研究原因是有意义的。 - oklas
你的回答与问题中的错误信息毫无关系。MongoDB服务器未安装或未启动,这与你的解决方案完全不同。 - Wernfried Domscheit
同样的错误可能由不同的原因引起。您提到了当mongo服务器未运行或未安装时的情况。我们还可以添加不正确指定的URL和其他情况。对于所有这些情况,可能已经存在一个答案。如果没有,您可以选择添加它。这并不排除导致依赖项版本不匹配而导致相同错误的可能性。这个答案让你知道了这一点。与错误的关系可能看起来不明显,这只会使答案更加有用。 - oklas
我在更新操作系统和brew后遇到了这个问题。我通过以下方式解决了这个问题。当我在寻找答案时,我发现了这个问题。我添加了答案,因为它帮助了我,也会帮助其他人。你在评论中表达了你的观点。我希望这个主题已经得到了涵盖。 - oklas
我已经添加了一条注释,提醒人们不要混淆。在这种情况下,如果出现类似协议不兼容或版本不同的错误,那么错误会更容易理解。rsync在协议不兼容的情况下也会给出未解释的错误。 - oklas
显示剩余2条评论

3
如果已经安装了mongoDB服务器,但无法从远程主机连接,请按照以下步骤操作: 登录到您的计算机,在位于/etc/mongod.conf的mongodb配置文件中更改bindIp字段为特定的ip地址/0.0.0.0,之后重新启动mongodb服务器。
    sudo vi /etc/mongod.conf
  • The file should contain the following kind of content:

      systemLog:
          destination: file
          path: "/var/log/mongodb/mongod.log"
          logAppend: true
      storage:
          journal:
              enabled: true
      processManagement:
          fork: true
      net:
          bindIp: 127.0.0.1  // change here to 0.0.0.0
          port: 27017
      setParameter:
          enableLocalhostAuthBypass: false
    
  • Once you change the bindIp, then you have to restart the mongodb, using the following command

      sudo service mongod restart
    
  • Now you'll be able to connect to the mongodb server, from remote server.


TO 尝试连接到 localhost,但是从 远程 服务器没有连接。 - Wernfried Domscheit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接