【问题标题】:Mongodb failed to connect to server errorMongodb无法连接服务器错误
【发布时间】:2018-12-13 07:05:44
【问题描述】:

运行“nodemon index.js”后,我收到此错误,不是我的应用程序无法连接到 mongo:

{ MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: getaddrinfo ENOTFOUND localhost localhost:27017]
at Pool.<anonymous> (/Users/Dakota/Projects/2018-Udemy-Bootcamp/node-mongo-project/todos_api/node_modules/mongodb-core/lib/topologies/server.js:564:11)
at emitOne (events.js:116:13)
at Pool.emit (events.js:211:7)
at Connection.<anonymous> (/Users/Dakota/Projects/2018-Udemy-Bootcamp/node-mongo-project/todos_api/node_modules/mongodb-core/lib/connection/pool.js:317: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/Dakota/Projects/2018-Udemy-Bootcamp/node-mongo-project/todos_api/node_modules/mongodb-core/lib/connection/connection.js:246: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)
name: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]: {} }

我的代码如下:

let mongoose = require('mongoose');
let dbUrl = 'mongodb://localhost/todo-api';
mongoose.set('debug', true);

mongoose.Promise = Promise;

mongoose.connect(dbUrl, { useNewUrlParser: true }).then(() => {
  console.log("Database connection is active");
}).catch(err => {
  console.log(err);
});

module.exports.Todo = require('./todo');

我已经在终端启动了 mongod。

这个问题发生在我家的网络上,但如果我去街上的咖啡店,它会连接。我已经阅读了一些有关导致问题的防火墙和 IP 地址的内容,并尽我所能调整这两件事,但我似乎仍然无法解决这个问题。

关于如何解决这个问题的任何见解?

【问题讨论】:

  • 您的数据库是否正在运行?终端中service mongod status 的输出是什么?

标签: javascript node.js mongodb express


【解决方案1】:

首先,检查你的mongodb服务是否运行正常。

您也可以将 localhost 替换为 127.0.0.1,如下所示:

// connect to database
mongoose.connect('mongodb://127.0.0.1/todo-api', { useNewUrlParser: true});
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
db.once('open', function() {
  console.log(`MongoDB connected!`);
});

编辑:我发现 this 来自猫鼬文档:

MongoDB 副本集依赖于能够可靠地找出每个成员的域名。在 Linux 和 OSX 上,MongoDB 服务器使用hostname 命令的输出来确定要报告给副本集的域名。如果您连接到在将其 hostname 报告为 localhost 的机器上运行的远程 MongoDB 副本集,这可能会导致令人困惑的错误:

// Can get this error even if your connection string doesn't include
// `localhost` if `rs.conf()` reports that one replica set member has
// `localhost` as its host name.
failed to connect to server [localhost:27017] on first connect

如果您遇到类似错误,请使用 mongo shell 连接到副本集并运行 rs.conf() 命令检查每个副本集成员的主机名。 Follow this page's instructions to change a replica set member's host name.

【讨论】:

  • 成功了,非常感谢!关于为什么这可能会给我带来问题的任何见解?旁注这适用于 node 和 nodemon
猜你喜欢
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 2020-11-03
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多