从node.js连接到mongodb时发生ECONNREFUSED错误

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

我用自制软件安装了mongodb,似乎工作得很好。 我已经启动了服务器(mongod)作为本地login用户,并打开了第二个terminal,并确认可以使用mongo连接到它。 当我运行mongo时,我收到消息“连接到:localhost:27017 / test”,然后是命令提示符。 在mongo shell中运行一些命令似乎在那里工作。 将两个端子打开并运行。

我也确认我可以在本地主机:28017上访问web界面。

我安装了node.js并添加了mongoose包。 现在尝试使用超级简单的node.js应用程序(也作为本地login用户运行)进行连接:

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) 

ECONNREFUSED错误

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

  1. 您的端口已经在服务某些服务,所以会拒绝您的连接。

    去命令行,使用以下命令获得pid

    $ lsof -i:port_number

    现在通过使用kill pid

    $ kill -9 pid(which you will get by above command)

  2. 您的服务器没有运行,例如在这种情况下,请检查您的mongoose服务器正在运行或使用以下命令运行。

    $ mongod

  3. 也有可能你的localhostconfiguration不正确,所以使用127.0.0.1:27017而不是localhost。

使用此代码来设置您的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"); }); 

确保在启动服务器时mongod正在运行。 你使用Express还是一个简单的node.js服务器? 上述代码得到的错误信息是什么?

好的,这是另一个在我上面发布的信息中没有真正实现的情况。 我的node.js应用程序非常简单,但是我在node.js代码中包含了另外几行,这显然导致了这个问题。

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

获得的教训,本地化问题和注释掉无关的代码! 对不起,我知道这是我愚蠢的。

我有同样的问题。 它已通过在pipe理员控制台中运行相同的代码解决。

很奇怪,但在我的情况下,我切换wifi连接…

我使用一些公共WiFi并切换到我的电话连接

我在使用node.js编写一个简单的rest API时面临同样的问题,最终发现这是由于无线networking堵塞和安全原因造成的。 尝试使用移动热点连接它 。 如果这是它立即得到解决的原因。