我正在使用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问题,但无法找到关于“拓扑被破坏”的含义的明确答案,以及如何防止它在我们正在使用的测试方法中出现。
谢谢!
答案 0 :(得分:20)
如果有人偶然发现这个问题,那么问题就是对db.close()
稍后使用的相同数据库引用进行了错误的db.dropDatabase()
调用。 IMO' 拓扑已被破坏'这是一个奇怪的错误(可能' 套接字关闭'),但在这种情况下是问题。