我知道我正在做一些非常愚蠢和愚蠢的事情,但我希望有人可以帮我在mac上从node.js建立与mongodb的基本数据库连接。
我用自制软件安装了mongodb,似乎运行得很好。我已经启动了服务器(mongod)作为本地登录用户,并打开了第二个终端并确认我可以使用mongo连接到它。当我运行mongo时,我收到消息“connect to:localhost:27017 / test”,然后是命令提示符。在mongo shell中运行一些命令似乎一切都在那里工作。将两个端子都打开并运行。
我还确认我可以访问localhost:28017的网络界面。
我安装了node.js并添加了mongoose包。现在尝试使用超级简单的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)
答案 0 :(得分:23)
ECONNREFUSED错误
节点中出现此错误的原因很少:
您的端口已经提供服务,因此会拒绝您的连接。
转到命令行并使用以下命令获取pid
$ lsof -i:port_number
现在使用
杀死pid $ kill -9 pid(which you will get by above command)
您的服务器未运行,例如在这种情况下,请使用以下命令检查您的mongoose服务器是否正在运行或运行。
$ mongod
您的localhost
也可能未正确配置,因此请使用127.0.0.1:27017
代替localhost。
答案 1 :(得分:11)
好的,这是我在上面发布的信息中没有真正提出的另一个案例。我的node.js app 非常简单,但我在node.js代码中包含了另外几行显然导致了这个问题。
具体来说,我声明了另一个变量,它调用了一些其他代码,这些代码使用不正确的db信息进行单独的数据库调用。这就是为什么在使用Xinzz的代码时,控制台日志错误似乎没有改变。它实际上并不是抛出错误的mongoose.connect命令!
经验教训,将问题本地化并注释掉不相关的代码!对不起伙计们,我知道这是我的傻瓜。
答案 2 :(得分: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");
});
启动服务器时确保mongod正在运行。您使用Express还是只是一个简单的node.js服务器?您使用上述代码获得的错误消息是什么?
答案 3 :(得分:3)
非常奇怪,但在我的情况下,我切换wifi连接......
我使用一些公共wifi并切换到我的手机连接
答案 4 :(得分:2)
我有同样的问题。通过在管理员控制台中运行相同的代码解决了这个问题。
答案 5 :(得分:2)
在使用node.js编写简单的rest api时,我遇到了同样的问题 最终发现这是由于 wifi阻塞和安全原因造成的。 尝试使用移动热点连接后。 如果这是它将立即得到解决的原因。
答案 6 :(得分:0)
我有同样的问题。我所做的是在另一个终端上运行mongodb
命令。然后,在另一个选项卡中运行我的应用程序。这解决了我的问题。不过,我正在尝试其他解决方案,例如创建脚本以在建立连接之前运行mongodb
。
答案 7 :(得分:0)
如果目标数据库位于其他计算机中,则有时需要检查IP,防火墙,端口转发等的合法性。
答案 8 :(得分:0)
我遇到了同样的问题,我所做的就是在尝试连接到Mongo服务器之前添加了大约10秒钟的setTimeout
,它立即解决了该问题。我不知道为什么我必须添加一个延迟,但是它可以工作...
答案 9 :(得分:0)
我也遇到了同样的问题,所以我像这样修复它:
如果您正在docker容器或docker compose中运行mongo和nodejs
因此将mongo(在我的情况下为docker中的容器名称)替换为localhost,如下所示在nodejs mongo连接文件中。
var mongoURI = "mongodb://mongo:27017/<nodejs_container_name>";
答案 10 :(得分:0)
检查此帖子。 https://stackoverflow.com/a/57589615
这可能意味着mongodb没有运行。您将必须通过命令行或在Windows上运行services.msc并启用mongodb来启用它。
答案 11 :(得分:0)
我尝试了所有可能的解决方案,但并没有帮助我。我休息了一下,并更改了以下内容。简单的错字。可能会帮助某人处于同样的情况。
从:
app.listen((port)=> console.log(Server is running at port ${PORT}
))
收件人:
app.listen(PORT,console.log(Server is running at port ${PORT}
))
较早版本让我连接到数据库mongo地图集,但得到请求是错误的:connect ECONNREFUSED
答案 12 :(得分:0)
答案 13 :(得分:0)
Mongodb 没有运行,但我有 node.js 的模块 数据库路径丢失。修复是在根目录中创建新文件夹所以运行
须藤 mkdir -p /data/db/
然后运行
须藤 chown id -u
/data/db
答案 14 :(得分:-1)
我手动启动了 mongodb 服务。
控制面板 -> 管理工具 -> 服务 -> Mongodb
然后启动/重新启动它。大功告成!
快乐编码! :-)