【问题标题】:Error: connection timeout - expressjs mongodb mongoose错误:连接超时 - expressjs mongodb mongoose
【发布时间】:2017-06-29 21:10:37
【问题描述】:

一般来说,我是 express/node 和 Web 编程的新手。当mongoose的mongodb连接超时时,处理这个错误的最佳方法是什么,我是这样连接的:

mongoose.connect(config.mongoUrl);

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'error connecting with mongodb database:'));
db.once('open', function() {
  console.log('connected to mongodb database');
});

这是我的服务器运行时超时的错误:

连接 mongodb 数据库时出错:错误:连接超时 在数据库。 (C:\Users\Sean\OneDrive\webpages\000\lasttry\node_modules\mongoose\lib\drivers\node-mongodb-native\connection.js:169:17) 在 emitTwo (events.js:106:13) 在 Db.emit (events.js:191:7) 在 Server.listener (C:\Users\Sean\OneDrive\webpages\000\lasttry\node_modules\mongodb\lib\db.js:1798:14) 在 emitOne (events.js:96:13) 在 Server.emit (events.js:188:7) 在服务器。 (C:\Users\Sean\OneDrive\webpages\000\lasttry\node_modules\mongodb\lib\server.js:274:14) 在 emitOne (events.js:96:13) 在 Server.emit (events.js:188:7) 在游泳池。 (C:\Users\Sean\OneDrive\webpages\000\lasttry\node_modules\mongodb-core\lib\topologies\server.js:335:12) 在 emitOne (events.js:96:13) 在 Pool.emit (events.js:188:7) 在连接处。 (C:\Users\Sean\OneDrive\webpages\000\lasttry\node_modules\mongodb-core\lib\connection\pool.js:270:12) 在 Connection.g (events.js:291:16) 在 emitTwo (events.js:106:13) 在 Connection.emit (events.js:191:7)

【问题讨论】:

  • 什么时候超时?如果节点进程因我的计算机进入睡眠状态而中断,我只会遇到猫鼬超时。
  • 我正在使用 mLab,它是一个云 mongodb 服务。它似乎随机超时。我只见过它发生过两次,但如果我去生产它发生了,那将是一场噩梦,哈哈。
  • (参见文档。)[docs.mlab.com/timeouts/#connection-timeout]您需要设置一个连接超时值,就像我发布的答案一样。否则如果连接有任何小问题,它不会等待超时。
  • 感谢+1的回答
  • 没问题。祝你发展顺利

标签: mongodb express mongoose


【解决方案1】:

如何在断开连接时重新连接到 mongo。见下文:

mongoose.connect(config.mongoUrl);

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'error connecting with mongodb database:'));

db.once('open', function() {
  console.log('connected to mongodb database');
});    

db.on('disconnected', function () {
   //Reconnect on timeout
   mongoose.connect(config.mongoUrl);
   db = mongoose.connection;
});

您还可以在连接上设置超时值。

mongoose.connect(url, { server: { socketOptions: { connectTimeoutMS: 1000 }}}, function(err) { ... });

另外,请确保 mongo 仍在您的机器上运行。连接超时可能意味着 mongo 没有运行。

参考:Another stack overflow question

【讨论】:

    【解决方案2】:
    1. 检查 mongod 是否正在运行。

      在 shell 中输入 mongo

    2. 为你的uri添加connectTimeoutMS=300000参数。

      uri 看起来像 mongodb://localhost/collectionName?connectTimeoutMS=300000

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 2020-10-26
      • 1970-01-01
      • 2017-03-27
      • 2021-03-17
      • 1970-01-01
      • 2020-11-27
      • 2019-03-06
      • 2019-11-01
      相关资源
      最近更新 更多