从node.js连接到mongodb时出现ECONNREFUSED错误

我知道我正在做一些非常愚蠢和愚蠢的事情,但是我希望有人可以帮助我建立从Mac上的node.js到mongodb的基本数据库连接。

我已经使用自制软件安装了mongodb,效果似乎很好。 我已经以本地登录用户身份启动了服务器(mongod),并打开了第二个终端,并确认可以使用mongo连接到该服务器。 当我运行mongo时,出现消息“正在连接:localhost:27017 / test”,然后显示命令提示符。 在mongo shell中运行一些命令,一切似乎都在那儿工作。 左两个端子均打开并运行。

我还确认可以在localhost:28017到达Web界面。

我安装了node.js并添加了猫鼬包。 现在尝试使用超级简单的node.js应用(也以本地登录用户身份运行)进行连接:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

我收到以下错误

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: connect ECONNREFUSED
    at errnoException (net.js:901:11)
    at Object.afterConnect [as oncomplete] (net.js:892:19)

我的头撞在墙上,试图让事情变得如此简单。 我想念什么?

编辑:这是来自mongod的日志。 如您所见,我尝试了多次,但它们都瞬间失效:

Thu Dec  5 08:19:43.700 [initandlisten] MongoDB starting : pid=14412 port=27017 dbpath=/usr/local/var/mongodb 64-bit host=mobadmins-MacBook-Pro-3.local
           08:19:43.700 [initandlisten] db version v2.4.8
           08:19:43.700 [initandlisten] git version: nogitversion
           08:19:43.700 [initandlisten] build info: Darwin mobadmins-MacBook-Pro-3.local 12.4.0 Darwin Kernel Version 12.4.0: Wed May  1 17:57:12 PDT 2013; root:xnu-2050.24.15~1/RELEASE_X86_64 x86_64 BOOST_LIB_VERSION=1_49
           08:19:43.700 [initandlisten] allocator: tcmalloc
           08:19:43.700 [initandlisten] options: { bind_ip: "127.0.0.1", config: "/usr/local/etc/mongod.conf", dbpath: "/usr/local/var/mongodb", logappend: "true", logpath: "/usr/local/var/log/mongodb/mongo.log", rest: true }
           08:19:43.700 [initandlisten] journal dir=/usr/local/var/mongodb/journal
           08:19:43.700 [initandlisten] recover : no journal files present, no recovery needed
           08:19:43.729 [websvr] admin web console waiting for connections on port 28017
           08:19:43.729 [initandlisten] waiting for connections on port 27017
           08:22:34.561 [initandlisten] connection accepted from 127.0.0.1:52160 #3 (1 connection now open)
           08:22:34.563 [conn3] recv(): message len 1124073472 is too large. Max is 48000000
           08:22:34.563 [conn3] end connection 127.0.0.1:52160 (0 connections now open)
           08:24:41.298 [initandlisten] connection accepted from 127.0.0.1:52166 #4 (1 connection now open)
           08:24:41.304 [conn4] end connection 127.0.0.1:52166 (0 connections now open)
           08:25:06.938 [initandlisten] connection accepted from 127.0.0.1:52168 #5 (1 connection now open)
           08:25:06.943 [conn5] end connection 127.0.0.1:52168 (0 connections now open)
           08:25:18.220 [initandlisten] connection accepted from 127.0.0.1:52172 #6 (1 connection now open)
           08:25:18.225 [conn6] end connection 127.0.0.1:52172 (0 connections now open)
           08:25:38.811 [initandlisten] connection accepted from 127.0.0.1:52175 #7 (1 connection now open)
           08:25:38.816 [conn7] end connection 127.0.0.1:52175 (0 connections now open)
agoldencom asked 2020-08-08T19:11:25Z
9个解决方案
26 votes

ECONNREFUSED错误

节点中出现此错误的原因很少:

  1. 您的端口已在提供某些服务,因此它将拒绝您的连接。

    转到命令行并使用以下命令获取pid

    localhost

    现在使用杀死pid

    localhost

  2. 您的服务器未运行,例如 在这种情况下,请检查您的猫鼬服务器是否正在运行或使用以下命令运行。

    localhost

  3. 还有可能是您的localhost配置不正确,因此请使用127.0.0.1:27017而不是localhost。

Anshul answered 2020-08-08T19:12:00Z
12 votes

好的,这是我上面发布的信息中没有真正出现的另一种情况。 我的node.js应用程序非常简单,但是我在node.js代码中加入了几行显然引起了此问题。

具体来说,我声明了另一个变量,该变量正在调用其他代码,这些代码使用不正确的数据库信息进行了单独的数据库调用。 这就是为什么在使用Xinzz的代码时,控制台日志错误似乎没有改变的原因。 引发错误的实际上不是mongoose.connect命令!

获得的经验教训,定位问题并注释掉不相关的代码! 对不起,我知道这是我的愚蠢。

agoldencom answered 2020-08-08T19:12:30Z
7 votes

使用以下代码来设置您的mongodb连接:

var mongoose = require('mongoose');

var mongoURI = "mongodb://localhost:27017/test";
var MongoDB = mongoose.connect(mongoURI).connection;
MongoDB.on('error', function(err) { console.log(err.message); });
MongoDB.once('open', function() {
  console.log("mongodb connection open");
});

启动服务器时,请确保mongodb正在运行。 您是使用Express还是仅使用简单的node.js服务器? 您收到上述代码的错误消息是什么?

Xinzz answered 2020-08-08T19:12:54Z
3 votes

非常奇怪,但就我而言,我切换了wifi连接...

我使用一些公共wifi并切换到手机连接

itzhar answered 2020-08-08T19:13:18Z
2 votes

我有同样的问题。 通过在管理员控制台中运行相同的代码可以解决此问题。

Sheikh Abdul Wahid answered 2020-08-08T19:13:38Z
2 votes

使用node.js编写简单的rest api时遇到了相同的问题最终发现这是由于wifi阻塞和安全原因。尝试一次使用移动热点连接它。如果是这个原因,它将立即得到解决。

Adit Chauhan answered 2020-08-08T19:13:58Z
1 votes

如果目标数据库位于其他计算机中,则有时需要检查IP,防火墙,端口转发等的合法性。

goodhyun answered 2020-08-08T19:14:18Z
1 votes

我遇到了同样的问题,我所做的就是在尝试连接到Mongo服务器之前添加了大约10秒钟的setTimeout,它立即解决了该问题。 我不知道为什么我必须添加一个延迟,但是它起作用了...

max answered 2020-08-08T19:14:39Z
0 votes

我遇到过同样的问题。 我所做的是在另一个终端中运行mongodb命令。 然后,在另一个选项卡中运行我的应用程序。 这解决了我的问题。 虽然,我正在尝试其他解决方案,例如创建建立连接之前运行mongodb的脚本。

Ezrqn Kemboi answered 2020-08-08T19:14:59Z
translate from https://stackoverflow.com:/questions/20386464/econnrefused-error-when-connecting-to-mongodb-from-node-js