使用node.js mongodb native调用db.destroyDatabase时,什么可能导致“拓扑被破坏”错误?

时间:2015-10-25 16:20:00

标签: node.js mongodb

我正在使用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问题,但无法找到关于“拓扑被破坏”的含义的明确答案,以及如何防止它在我们正在使用的测试方法中出现。

谢谢!

1 个答案:

答案 0 :(得分:20)

如果有人偶然发现这个问题,那么问题就是对db.close()稍后使用的相同数据库引用进行了错误的db.dropDatabase()调用。 IMO' 拓扑已被破坏'这是一个奇怪的错误(可能' 套接字关闭'),但在这种情况下是问题。