我有一个一次性的Node脚本,可以对MongoLab上的MongoDB数据库进行一些更改。但是,一旦它完成,它永远不会退出事件循环(我总是需要ctrl + C它),无论我调用多少db.close()
和db.logout()
。
奇怪的是,如果我启动mongod
的本地运行实例并连接到该实例,则脚本完成正常,但远程连接永远不会结束。
这是我的脚本的简短版本仍然存在问题(在命令行上将URL带到服务器)。这是怎么回事?
var mongodb = require("mongodb");
function onSuccess(cb){
return function(err) {
if (err) {
console.error(err)
} else {
cb.apply(this,Array.prototype.slice.call(arguments,1))
}
}
}
console.log("Connecting to "+process.argv[2]+' ...');
mongodb.MongoClient.connect(process.argv[2],onSuccess(function(db){
console.log("Connected.");
db.logout(onSuccess(function(logoutResult){
db.close(onSuccess(function(closeResult){
console.log("All finished. Can has prompt return nao?")
}));
}));
}));
答案 0 :(得分:1)
我怀疑它与你定义闭合的方式有关,但我不能完全按手指。
对于值得的,以下是我使用的方法,这确实按预期关闭了连接:
MongoClient.connect(dbUrl, function(err, db) {
if(err) return callback(err);
var collection = db.collection(dbCollection);
collection.find().toArray(function(err, items){
db.close()
if(err) return callback(err);
callback(null, items);
});
});
您可以在此处找到完整示例:https://github.com/hectorcorrea/mongoDbSample
答案 1 :(得分:1)
刚刚尝试使用驱动程序版本1.2.7 / 1.2.8的代码和针对mongolab的最新1.2.9,它可以正常工作。因此,它更可能是驱动程序/操作系统/节点版本的奇怪组合。我建议将您的节点和驱动程序升级到最新版本,然后重试。