【发布时间】:2012-12-26 04:08:22
【问题描述】:
我在完成数据库工作后试图断开猫鼬连接,但似乎没有用
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/myDatabase');
var MyModel = mongoose.model('MyModel', MySchema);
//do something here
mongoose.disconnect();
第一次一切正常,但第二次运行代码时,我收到错误“尝试打开未关闭的连接”。我也试过 mongoose.connection.close();并得到相同的结果。
有人可以帮我解决这个问题吗?
非常感谢!
加里
我想我想通了。
在我的代码中,我试图对我的模型和数据库做一些事情:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/myDatabase');
var MyModel = mongoose.model('MyModel', MySchema);
MyModel.findOne({}, function () {...});
mongoose.disconnect();
看到问题了吗?由于Nodejs的非阻塞特性,在“findOne”完成之前就执行了“disconnect”,所以当然没有用!
解决办法是把断开连接放到回调函数中:
MyModel.findOne({}, function () {
...
mongoose.disconnect();
});
【问题讨论】:
-
既然您已经找到了解决方案,您应该在下面发布答案,而不是编辑问题描述。
-
实际上,由于该解决方案看起来像是来自 lancerex 的答案,因此您应该接受/支持该答案。
-
加里,你应该将其中一个答案标记为正确。