【问题标题】:MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]MongoNetworkError:第一次连接时无法连接到服务器 [localhost:27017] [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]
【发布时间】:2018-10-14 19:58:36
【问题描述】:

我是 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);

【问题讨论】:

  • 您可能已经安装了 MongoDB,但它肯定没有运行。你真的应该检查那些安装说明,并确保你可以在做任何其他事情之前从 mongo shell 连接。为了清楚起见,我们在同一页面上npm install mongodb 不是我们在这里谈论的内容。我们实际上是在为您的平台“安装服务器”。

标签: node.js mongodb express


【解决方案1】:

他们中的许多人没有添加这个,尤其是在 AWS EC2 实例中,我遇到了同样的问题并尝试了不同的解决方案。 解决方案:我在代码中的一个数据库 URL 缺少这个参数“authSource”,添加这个对我有用。

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

【讨论】:

  • 这救了我的命...好几天来一直在想办法解决这个问题。 ?authSource=admin 是为我做的!!!!
  • ThisauthSource的意思
【解决方案2】:

您必须先在系统中安装MongoDB 数据库服务器并启动它。

使用以下链接安装MongoDB

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

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

【讨论】:

    【解决方案3】:

    在尝试了谷歌针对堆栈溢出提出的所有解决方案之后,我发现了我的特殊问题。 我很久以前编辑了我的 hosts 文件,以便我可以从我的 virtualbox 访问我的 localhost。

    删除此条目为我解决了这个问题,以及从上述解决方案中给出的链接正确安装 mongoDB,并包括正确的承诺处理代码:

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

    【讨论】:

      【解决方案4】:

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

      sudo service mongod start

      然后在终端上运行 mongo

      【讨论】:

        【解决方案5】:

        您的 IP 地址可能已更改。

        如果您最近重新启动了调制解调器,这会更改您的 IP,该 IP 可能已在 Atlas 上列入白名单。

        太棒了,您需要跳回 Atlas 并将您的新 IP 地址添加到安全>网络访问下的白名单中。

        【讨论】:

          【解决方案6】:

          遵循上述@CoryM 回答背后的逻辑:

          在尝试了谷歌针对堆栈溢出提出的所有解决方案之后,我发现了我的特殊问题。很久以前我编辑了我的主机文件,以允许我从我的虚拟机访问我的本地主机。

          删除此条目为我解决了它...

          2 个月前,我也为 Python 机器学习设置编辑了我的 hosts 文件。因此,我没有删除它,因为我仍然需要它,而是使用 127.0.0.1 代替 localhost 并且它起作用了:

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

          【讨论】:

            【解决方案7】:

            这发生在我身上,我发现这是因为互联网连接故障。如果我在我的地方使用公共 wifi,出于安全原因阻止了各种网站,Mongo 拒绝连接。但如果我使用自己的移动数据,我可以连接到数据库。

            【讨论】:

            • 如果您在安全 > 网络访问 > IP 白名单下将您的 IP 地址列入白名单,然后尝试从不同的 IP 地址连接,Mongo 将阻止连接。这是一项安全功能,可确保只有受信任的 IP 才能连接到数据库。您只需要转到 Mongo DB Atlas 站点的上述部分,然后将您当前的 IP 地址(永久或临时)添加到白名单或临时允许从任何地方访问(即所有 IP 地址为 0.0.0.0/0)。出于明显的安全原因,不建议您永久允许从任何地方访问。
            【解决方案8】:

            如果已经安装了 mongoDB 服务器,并且无法从远程主机连接,请按照以下步骤操作,

            登录到你的机器,打开位于/etc/mongod.conf 的mongodb配置文件并将bindIp字段更改为特定的ip / 0.0.0.0,然后重启mongodb服务器。

                sudo vi /etc/mongod.conf
            
            • 该文件应包含以下类型的内容:

                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
              
            • 一旦你更改了bindIp,那么你必须重启mongodb,使用以下命令

                sudo service mongod restart
              
            • 现在您可以从远程服务器连接到 mongodb 服务器了。

            【讨论】:

              【解决方案9】:

              如果一切都已设置好,如安装 mongo db 和客户端,如 mongoose,只需在基本文件夹的终端中运行 mongod。运行命令后,运行您正在处理的项目文件,然后应该不会出现错误。

              【讨论】:

                【解决方案10】:

                您可以通过运行此命令检查错误的详细信息

                sudo service mongod status

                如果错误是这样的

                • 无法取消链接套接字文件 /tmp/mongodb-27017.sock 未知错误
                • src/mongo/transport/transport_layer_asio.cpp 670 处的致命断言 40486

                只需运行此程序即可解决您的问题

                rm /tmp/mongodb-27017.sock

                【讨论】:

                  【解决方案11】:

                  我在当地的星巴克工作时遇到了这个问题,我记得当我最初通过 Mongo Atlas 设置我的数据库时。我设置了我的 IP 地址以便能够访问数据库。在查看了几个线程后,我在 Atlas 上更改了我的 IP 地址,问题就消失了。希望这可以帮助某人。

                  【讨论】:

                    【解决方案12】:

                    我不知道这是否有帮助,但是当我这样做时它起作用了:

                    终端中的命令mongo

                    然后我复制了 mongo 命令返回的 URL,类似于

                    mongodb://127.0.0.1:*port*
                    

                    我在我的 JS 代码中用这个替换了 URL。

                    【讨论】:

                    • 为什么每个单词的首字母都大写?读起来很累。
                    • 哦! :-(但我对大写很满意
                    • stackoverflow.com/help/how-to-ask --> “拼写、语法和标点符号很重要!记住,这是其他人会看到的问题的第一部分——你想给人留下好印象。如果你不是用英文写作很舒服,请朋友为你校对。”
                    【解决方案13】:

                    首先通过命令行 mkdir C:\data\db 创建文件夹(这是用于数据库的) 然后通过一个命令提示符(管理模式)运行命令 mongod --port 27018 - 您可以根据需要提供名称端口号

                    【讨论】:

                      【解决方案14】:

                      我的问题是mongoDB 服务器的端口号错误。

                      我有:

                      DATABASE_URL= "mongodb://localhost:3000/node-express-mongodb-server"
                      

                      在我的.env 文件(我的环境变量)中,但我在运行mongoDB server 之前已经编写了它。所以当我运行mongoDB server 时,它写了一个不同的端口号,我不得不更改它。我将其更改为正确的端口号(mongoDB 在我的 cmd 窗口中写入):

                      DATABASE_URL= "mongodb://localhost:27017/node-express-mongodb-server"
                      

                      现在它可以正常工作了。

                      【讨论】:

                        【解决方案15】:

                        因此,当上述解决方案都不适合我时,在正确安装所有内容后,我想重新启动系统

                        现在可以了。

                        请注意,我做了上面所说的一切,但没有运气。唯一的重启对我有用。!! 您可能还想重新启动一次。

                        【讨论】:

                          【解决方案16】:

                          1) 如果你还没有安装 mongodb,请安装它。

                          2) 打开一个新终端,输入“mongo”。这会将您连接到在本地主机上运行的 MongoDB 实例,默认端口为 27017:

                          【讨论】:

                            【解决方案17】:
                            mongoose.connect('mongodb://localhost:27017/').then(() => {
                            console.log("Connected to Database");
                            }).catch((err) => {
                            console.log("Not Connected to Database ERROR! ", err);
                            });
                            

                            最好只连接到 localhost Mongoose 数据库并创建您自己的集合。不要忘记提及端口号。 (默认:27017)

                            为了获得最佳视图,请下载 Mongoose-compass for MongoDB UI。

                            【讨论】:

                            【解决方案18】:

                            这个帮助了我。 尝试创建一个新文件夹,如果您的 MongoDB 安装在 C:\Program Files 中,则该文件夹应称为 db 并位于文件夹 data 中。 C:\data\db

                            当您启动 mongod 时,应该有一个日志,其中 db '未找到'。

                            【讨论】:

                              【解决方案19】:

                              我连接到 VPN 并完成连接。我使用的是学校的 WiFi,显然有一些限制。

                              【讨论】:

                                【解决方案20】:

                                这对我有用。

                                mongoose.Promise = global.Promise;
                                
                                  .connect(
                                    "mongodb://127.0.0.1:27017/mydb",
                                    { useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true}).then(db => {
                                      console.log("Database connected");
                                    }).catch(error => console.log("Could not connect to mongo db " + error));
                                

                                我使用的是localhost,所以我将其更改为:

                                mongodb://127.0.0.1:27017/mydb
                                

                                【讨论】:

                                  【解决方案21】:

                                  我猜你一定是连接到 cloud.mongodb.com 到你的集群。

                                  一个快速解决方法是转到连接选项卡并添加您当前的 IP 地址(在浏览器或桌面应用程序的集群门户中)。 IP地址一定是因为各种原因发生了变化,比如换了wifi。

                                  试试这个方法,当我遇到这个错误时它对我有用。

                                  【讨论】:

                                    【解决方案22】:

                                    我的情况有点不同。重新启动系统后,我在进行本地开发时没有将我的 IP 地址列入 Mongo 的白名单。

                                    Select Network Access > Add IP Address > Add your current IP Address
                                    

                                    【讨论】:

                                      【解决方案23】:

                                      您的防火墙阻止了用于连接 MongoDB 的端口 27017。

                                      尝试找出您的系统中正在使用的防火墙, 例如在我的情况下是 csf, 配置文件放置在

                                      /etc/csf/csf.conf
                                      

                                      如下找到 TCP_IN 和 TCP_OUT 并将端口 27017 添加到允许的传入和传出端口

                                      # Allow incoming TCP ports
                                      TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,2222,27017"
                                      
                                      # Allow outgoing TCP ports
                                      TCP_OUT = "20,21,22,25,53,80,110,113,443,587,993,995,2222,27017"
                                      

                                      保存配置文件并重新启动 csf 以应用它:

                                      csf -r
                                      

                                      【讨论】:

                                        【解决方案24】:

                                        如果您在 .msi 安装程序上安装了 mongo,这可能会对某人有所帮助。请打开软件并选择修复而不是安装并重试,这对我有用。

                                        【讨论】:

                                          【解决方案25】:

                                          您必须先在系统中安装 MongoDB 数据库服务器并启动它。

                                          Use the below link to install MongoDB

                                          如果您已经在系统中安装了 MongoDB 数据库,那么您必须通过以下步骤检查您的数据库是否处于起始位置:

                                          1. 按 CTRL + Shift + Esc
                                          2. 转到服务选项卡并搜索 Mongo
                                          3. 检查状态 - 它可能已停止。所以点击右下角的Services选项卡,再次搜索MongoDB
                                          4. 单击它并通过右键单击或在左侧面板中启动数据库。

                                          【讨论】:

                                            【解决方案26】:

                                            您的节点版本已升级。所以请按照以下步骤进行

                                            1. 安装 nvm
                                            2. 并安装旧版本的节点,例如。 nvm i 16.12.0
                                            3. nvm 使用 16.12.0

                                            nvm 的有用命令

                                            可用的 nvm 列表(将显示可用的节点版本)

                                            【讨论】:

                                              【解决方案27】:

                                              如果在 macbook 上发生错误,请运行此命令以保持 mongodb 服务器运行。

                                              mongod --config /usr/local/etc/mongod.conf --fork
                                              

                                              问题主要是您的 mongodb 服务器拒绝连接,这可能是服务器未打开/未激活,即使它已安装在您的 macbook 上。

                                              【讨论】:

                                                【解决方案28】:

                                                如果在Mongodb 之前安装,请从以下代码开始:

                                                brew services start mongodb-community
                                                next => mongod
                                                

                                                如果在此之前未安装

                                                1.brew tap mongodb/brew
                                                2.brew install mongodb-community
                                                3.brew services start mongodb-community
                                                4.mongod
                                                

                                                【讨论】:

                                                  【解决方案29】:

                                                  您需要先初始化您的 mongoDB 数据库,您可以在终端中运行“mongod”,然后它就可以正常工作了。

                                                  【讨论】:

                                                    【解决方案30】:

                                                    只需在您的系统上安装 MongoDB。而已。

                                                    【讨论】:

                                                    • 这没有提供问题的答案。请注意,这个问题已经有一个公认的答案。请edit您的答案,以确保它改进了此问题中已经存在的其他答案。
                                                    猜你喜欢
                                                    • 1970-01-01
                                                    • 2021-02-16
                                                    • 1970-01-01
                                                    • 2022-11-23
                                                    • 1970-01-01
                                                    • 2022-08-15
                                                    • 2022-12-10
                                                    • 2017-05-27
                                                    • 2018-10-04
                                                    相关资源
                                                    最近更新 更多