
[英]Error when connecting to MongoDB node.js - client is not defined
[英]ECONNREFUSED error when connecting to mongodb from node.js
我知道我在做一些非常愚蠢和笨拙的事情,但我希望有人可以帮助我在 mac 上从 node.js 建立到 mongodb 的基本数据库连接。
我已经使用自制软件安装了 mongodb,似乎运行良好。 我已经以本地登录用户的身份启动了服务器 (mongod),并打开了第二个终端并确认我可以使用 mongo 连接到它。 当我运行 mongo 时,我收到消息“connecting to: 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)
ECONNREFUSED 错误
node 中出现此错误的原因很少:
您的端口已经在提供某些服务,因此它将拒绝您的连接。
转到命令行并使用以下命令获取 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。
好的,这是我在上面发布的信息中没有真正出现的另一种情况。 我的 node.js 应用程序非常简单,但是我在我的 node.js 代码中包含了另外几行显然导致此问题的代码。
具体来说,我声明了另一个变量,它调用了一些其他代码,这些代码使用不正确的数据库信息进行了单独的数据库调用。 这就是为什么在使用 Xinzz 的代码时,控制台日志错误似乎没有改变的原因。 实际上,引发错误的不是 mongoose.connect 命令!
吸取教训,定位问题并注释掉不相关的代码! 对不起,伙计们,我知道这是我愚蠢的。
使用此代码设置您的 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 服务器? 使用上述代码得到的错误信息是什么?
很奇怪,但就我而言,我切换了wifi连接......
我使用一些公共 wifi 并切换到我的手机连接
我在使用 node.js 编写一个简单的 rest api 时遇到了同样的问题,最终发现这是由于wifi 阻塞和安全原因。 尝试使用您的移动热点连接它。 如果这是原因,它将立即得到解决。
我有同样的问题。 通过在管理员控制台中运行相同的代码来解决它。
有时你需要检查IP、防火墙、端口转发等的合法性,如果你的目标数据库在其他机器上。
我遇到了同样的问题,我所做的只是在尝试连接到 Mongo 服务器之前添加了大约 10 秒的setTimeout
,它立即解决了问题。 我不知道为什么我必须添加延迟,但它起作用了......
我也遇到了同样的问题,所以我这样修复它:
如果您在 docker 容器或 docker compose 中运行 mongo 和 nodejs
所以在你的nodejs mongo连接文件中用mongo(在我的例子中是docker中的容器名称)替换localhost,如下所示。
var mongoURI = "mongodb://mongo:27017/<nodejs_container_name>";
我遇到过同样的问题。 我所做的是在另一个终端中运行mongodb
命令。 然后,在另一个选项卡中运行我的应用程序。 这解决了我的问题。 不过,我正在尝试其他解决方案,例如在建立连接之前创建一个脚本来运行mongodb
。
检查这篇文章。 https://stackoverflow.com/a/57589615
这可能意味着 mongodb 没有运行。 您必须通过命令行或在 Windows 上运行 services.msc 并启用 mongodb 来启用它。
我尝试了所有可能的解决方案,但对我没有帮助。 我休息了一下,然后更改了以下内容。 简单的错字。 可以帮助某人是同样的情况。 来自:app.listen((port)=>console.log( Server is running at port ${PORT}
))
To: app.listen(PORT, console.log( Server is running at port ${PORT}
)) 前面让我连接到数据库 mongo atlas 但获取请求是 Error: connect ECONNREFUSED
Mongodb 没有运行,但我有 node.js 的模块 缺少数据库路径。 修复是在根目录中创建新文件夹,因此运行 sudo mkdir -p /data/db/ 然后运行 sudo chown id -u
/data/db
我手动启动了 mongodb 服务。
控制面板 -> 管理工具 -> 服务 -> Mongodb
然后启动/重新启动它。 完成!
快乐编码! :-)
对我来说,我不得不将“localhost”更改为“127.0.0.1”,然后它又开始工作了:
mongoose.connect('mongodb://127.0.0.1/test')
认为我有同样的错误; 我很困惑何时使用 mongodb、mongod 或 mongoose。
代码/node_modules/mongoose/lib/connection.js:819 const serverSelectionError = new ServerSelectionError(); ^ MongooseServerSelectionError:连接 ECONNREFUSED 127.0.0.1:27017
mongod
在我的系统上本地运行良好。 我可以用 Mongo Compass 连接它,但 mongoose 只是拒绝连接。 神奇的词是directConnection=true
,如
mongodb://127.0.0.1:27017/test?directConnection=true
版本:
对于我的情况,这解决了:
控制面板 -> 管理工具 -> 服务 -> 启动 MongoDB 服务器
如果您尝试连接到远程 MongoDB 服务器并收到 ECONNREFUSED 错误,请确保将绑定 ip选项设置为0.0.0.0
。
有关更多信息,请参阅https://www.mongodb.com/docs/manual/core/security-mongodb-configuration/或使用 MongoDB 配置文件,如此:mongodconf, 阅读更多配置文件:
net:
bindIp: 0.0.0.0
您可以只使用您的本地 IP address
(例如127.0.0.1
),而不是使用localhost
。
(localhost = 127.0.0.1:27017)
'mongodb://127.0.0.1:27017/<ele.Name>'
这就是我得到解决方案的方式
你好,这很有趣,我的意思是它很有趣。 Headover to start button and type service from there ho Down to and look for mongodb.right click it and click start. Mongod 将启动。 Go 回到你的项目,稍后谢谢我
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.