[英]MongoNetworkError: failed to connect to server [localhost:27017] on first connect
[英]UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError
我尝试运行以下命令:
node index.js
但是,我从我的终端得到以下信息:
success connection to port 3000
(node:16767) UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError
: connect ECONNREFUSED 127.0.0.1:27017]
at Pool.<anonymous> (/Users/hatchery/Documents/nodejs/fxexpress/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/server.js:503:11
)
at emitOne (events.js:116:13)
at Pool.emit (events.js:211:7)
at Connection.<anonymous> (/Users/hatchery/Documents/nodejs/fxexpress/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:326:12)
at Object.onceWrapper (events.js:317:30)
at emitTwo (events.js:126:13)
at Connection.emit (events.js:214:7)
at Socket.<anonymous> (/Users/hatchery/Documents/nodejs/fxexpress/node_modules/mongoose/node_modules/mongodb-core/lib/connection/connection.js:245:50)
at Object.onceWrapper (events.js:315:30)
at emitOne (events.js:116:13)
at Socket.emit (events.js:211:7)
at emitErrorNT (internal/streams/destroy.js:64:8)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
(node:16767) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:16767) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
我不确定为什么会收到此错误。 任何人都可以建议该怎么做?
虽然上述解决方案可能有效,但最好了解如何调试以及错误内容。
您得到了UnhandledPromiseRejectionWarning
,因为在您的代码中,您不能处理连接到 MongoDB 的承诺拒绝情况。
接下来,节点服务器连接到mongodb失败。 这可能是由于几个原因。 @Sayegh 提到的一种简单情况,服务器本身没有运行。 可能是其他原因,例如错误的端口等,服务器不接受传入连接等。
如何调试。 第一步是确定进程是否正在运行。 一种简单的方法是运行此命令ps aux | grep mongo
ps aux | grep mongo
以文本形式列出所有用户的所有进程。 如果这是真的但仍然无法连接,请查找端口。 如果仍然无法连接,请检查服务器是否接受传入连接并从那里获取。
不确定您使用的是什么系统,但如果您使用的是 Linux,请尝试运行它:
mongo
或对于 macOS:
mongod
并让它在新终端中运行,然后再次尝试运行服务器
在启动 NodeJS 命令之前,请确保使用正确的权限创建正确的目录:
> sudo mkdir -p /data/db
> sudo chmod -R go+w /data/db
我遇到了同样的问题,并通过将数据库用户的用户名和密码更改为更简单的东西(如dev:dev)来解决,并且我在将其与user-dev:user-dev一起使用时出错了……只需将其更改为简单的内容即可
首先我尝试了Skitty的解决方案,它对我不起作用,但我仍然将解决方案保留在我的代码中,然后我更改了app.listen(process.env.PORT || 3000);
它对我有用。
我遇到了同样的问题,但经过大量 RND。 我发现问题出在哪里,所以在你的终端上运行这个命令。
须藤服务 mongod 开始
然后在终端上运行mongo并查看。
只需修复系统中安装的 mongodb。 通过单击您安装的软件包,您将可以选择修复它。
如果您使用的是 Mongo db atlas,请继续网络访问并设置为您当前的 IP 地址,然后重新运行您的命令。
我希望它对你有用。
如果您是 Mac 用户,这可能是相关评论。 对我来说这是因为服务器没有运行。 在运行mongodb
,我在控制台中看到一条消息,说没有/data/db
并且 / 对我来说是不可写的。 所以我使用了synthetic.conf 解决方案。
sudo mkdir -p /System/Volumes/Data/data/db
sudo chown -R
whoami
/System/Volumes/Data/data/db`
echo "data\\t/System/Volumes/Data/data" | sudo tee -a /etc/synthetic.conf
mongodb
它有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.