这是我在这里的第一篇文章。
我正在学习Node和Mongodb。我已经安装了node-mongodb-native驱动程序,并发现了一些意想不到的事情。
我的脚本位于the official tutorial之下。
var test; //short cut for later use
require('mongodb').MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
if (err) {return console.log("some error",err);}
console.log("database connected");
test = db.collection('test');
test.find().toArray(function(err, items) {
if (err) {console.log("some error");}
else {console.log("still connected");}
});
});
var rep = function () {
setTimeout(function () {
test.find().toArray(function(err, items) {
if (err) {console.log("some error: " + err);}
else {console.log("still connected");}
});
rep();
}, 2000);
}
rep();
所以每经过2秒,console.log输出“仍然连接”,这是预期的。
如果mongod.exe窗口关闭(模拟丢失与数据库的连接),我希望在console.log中看到“some error”。但是,不会记录任何错误消息。
重启mongod.exe(模拟重新连接)时,console.log输出很多“仍然连接”的流
我无法从手册或其他在线资源中找到答案。所以我提出两个问题:
1)当前检测突然mongodb断开的最佳做法是什么?('close')当发生断开连接时是否应该使用find()查询发出错误?
2)重新连接后,console.log会输出相同消息的多行,就好像它们在断开连接时已经排队一样,现在一次被记录。这是正常的吗?我可以想到一个真实的生活问题:管理员可能会使用insert()来添加一些数据,而不是find()。数据库连接中断但没有错误消息,因此管理员可能会执行许多insert()但仍然看不到结果。然后重新连接时,一群insert()查询会淹没数据库?
请指出我的无知......