【问题标题】:What could cause a "topology was destroyed" error when calling db.destroyDatabase with node.js mongodb native?使用 node.js mongodb native 调用 db.destroyDatabase 时,什么可能导致“拓扑被破坏”错误?
【发布时间】:2016-01-24 17:43:54
【问题描述】:

我正在使用 Node.js Mongodb 本机驱动程序运行一些集成测试。每个测试都涉及连接到数据库,验证它不存在(例如,没有任何带有文档的集合),运行测试,然后删除数据库。高级代码如下:

const runSafeTest = function runSafeTest(test) {
  async.waterfall([
    connectToMongo,
    throwIfDbExists,
    instantiateServerConnection,
    test
  ],
  function doneWaterfall(err, db) {
    db.dropDatabase(function(dbErr) {
      if (dbErr) throw dbErr
    });
  })
};

每次调用db.dropDatabase() 都会引发以下错误:

MongoError: topology was destroyed

不要求对上述代码进行具体调试,而只是一个一般性问题:MongoDB中的“拓扑被破坏”错误是什么意思,哪些事情会导致它?浏览了 Mongo 文档、源代码和其他 SO 问题,但找不到关于“拓扑被破坏”是什么意思的明确答案,以及我如何防止它在我们使用的测试方法中体现出来。

谢谢!

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    如果有人偶然发现这个问题,问题是错误的db.close() 调用稍后用于db.dropDatabase() 的同一个数据库引用。 IMO 'topology was destroy' 是一个奇怪的错误(可能是'socket closed'),但在这种情况下是问题所在。

    【讨论】:

    • 通常不会有人接受自己的答案,但我想有 10 票赞成在这种情况下是公平的......
    猜你喜欢
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2015-09-03
    • 2016-03-08
    • 1970-01-01
    相关资源
    最近更新 更多