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

ago*_*com 43 mongodb node.js

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

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

我还确认我可以访问localhost:28017的web界面.

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

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

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)
Run Code Online (Sandbox Code Playgroud)

我的头撞在墙上试图让事情变得如此简单.我错过了什么?

编辑:这是来自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)
Run Code Online (Sandbox Code Playgroud)

Ans*_*hul 26

ECONNREFUSED错误

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

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

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

    $ lsof -i:port_number

    现在通过使用杀死pid

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

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

    $ mongod

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

  • 对我来说问题是我当地的mongod没有运行.我的机器早先崩溃了,我忘了启动它.感谢您的回答!我给了它一个投票. (6认同)

Jon*_*han 21

对我来说,我必须将“localhost”更改为“127.0.0.1”,然后它再次开始工作:

mongoose.connect('mongodb://127.0.0.1/test')
Run Code Online (Sandbox Code Playgroud)


ago*_*com 12

好的,这是我在上面发布的信息中没有真正即将出现的另一个案例.我的Node.js应用程序非常简单的,但我包括我的Node.js代码另一对夫妇线,显然导致出现此问题.

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

获得的经验教训,本地化问题并注释掉不相关的代码!对不起伙计们,我知道这是我的愚蠢.


Xin*_*nzz 7

使用此代码设置您的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");
});
Run Code Online (Sandbox Code Playgroud)

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

  • ECONNREFUSED通常意味着mongo未运行或您的应用程序无法访问正在运行的端口.你可以访问http:// localhost:27017 /? (4认同)
  • 不幸的是,我使用上面的代码收到了完全相同的错误。Mongod 肯定正在运行,因为我可以在 http://localhost:28017/ 查看 mongod 网页。我是一个菜鸟,所以我不完全确定,但我经历了 node.js 的安装过程,我通过在终端中输入“node app.js”来运行服务器,所以我相信我正在运行一个简单的 node.js 服务器。 (2认同)
  • 我可以从终端使用 mongo 访问 localhost:27017 。我可以从网络浏览器访问 localhost:28017。mongod 肯定正在运行,并且在该端口上! (2认同)

Adi*_*ngh 6

您可以只使用您的本地 IP 地址(例如 127.0.0.1),而不是使用 localhost。

(本地主机 = 127.0.0.1:27017)

'mongodb://127.0.0.1:27017/<ele.Name>'

这就是我得到解决方案的方式