【问题标题】:MongoError: connection 0 to localhost:27017 timed outMongoError:连接 0 到 localhost:27017 超时
【发布时间】:2017-05-14 16:09:03
【问题描述】:
events.js:141
      throw er; // Unhandled 'error' event
MongoError: connection 0 to localhost:27017 timed out
at Function.MongoError.create (/home/ubuntu/scripts/node_modules/mongodb-core/lib/error.js:29:11)
    at Socket.<anonymous> (/home/ubuntu/scripts/node_modules/mongodb-core/lib/connection/connection.js:184:20)
    at Socket.g (events.js:260:16)
    at emitNone (events.js:67:13)
    at Socket.emit (events.js:166:7)
    at Socket._onTimeout (net.js:318:8)
    at _runOnTimeout (timers.js:524:11)
    at _makeTimerTimeout (timers.js:515:3)
    at Timer.unrefTimeout (timers.js:584:5)

在连接过程中没有错误,但是当尝试保存一些模型/集合时,它会运行一段时间然后抛出这个错误。 顺便说一句,我还有另一个节点进程连接到同一个 mongodb 服务器。非常感谢任何帮助。

【问题讨论】:

  • 添加有关 event.js 文件的详细信息
  • 我认为是events.js(eventEmitter类)中内置的nodejs。我不知道它在哪里。
  • 如果您的查询花费了很长时间(几秒钟),那么您的系统中存在严重缺陷,或者您正在做更多通常 API 应该做的事情。尝试在 mongo 集合中使用索引来提高性能。
  • 当查询“长/重”(2s-5s)但不够长以至于它实际上应该触发默认超时 30s 时,有些人会收到此错误。对我来说,当我从 ≥mongoose-4.11 切换到 useMongoClient: true 时,这种情况就消失了。

标签: node.js mongodb mongoose


【解决方案1】:

您的查询需要很长时间。 mongo 本身有一个默认的超时设置。因此,如果查询花费的时间超过超时时间,它就会超时。

【讨论】:

    【解决方案2】:

    你必须在你的连接上使用这个配置: keepAlive:300000,connectTimeoutMS:30000

    【讨论】:

    • 如何使用 nodejs 驱动程序做到这一点?像这样? MongoClient.connect("mongodb://localhost:27017/articledb", { keepAlive: 30000, connectTimeoutMS: 30000, }, function(err, db) {})
    【解决方案3】:
    const mongoose = require('mongoose');
    const option = {
        socketTimeoutMS: 30000,
        keepAlive: true,
        reconnectTries: 30000
    };
    
    const mongoURI = process.env.MONGODB_URI;
    mongoose.connect(mongoURI, option).then(function(){
        //connected successfully
    }, function(err) {
        //err handle
    });
    

    【讨论】:

    • 它们在 mongoose 5.x 中已被弃用,您现在可以将它们放在选项映射的顶层。 const options = { keepAlive: 300000, connectTimeoutMS: 30000 };
    • 对我来说,上述方法都不起作用,所以不得不降级,这个解决了:stackoverflow.com/a/46699144/2427266
    • options 可用,如果您想检查它是否仍然受支持
    【解决方案4】:

    如果您确定您导出了端口-p 27017:2017,但它仍然无法正常工作。

    检查您的 VPN 是否阻止本地网络共享。

    【讨论】:

      猜你喜欢
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多