8

完成数据库工作后,我试图断开猫鼬连接,但似乎没有用

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.connect('mongodb://localhost:27017/myDatabase'); 

var MyModel =  mongoose.model('MyModel', MySchema);

MyModel.findOne({}, function () {...});

mongoose.disconnect();

看到问题了吗?由于 Nodejs 的非阻塞特性,在“findOne”完成之前就执行了“断开连接”,所以当然没有用!

解决方法是将断开连接放入回调函数中:

MyModel.findOne({}, function () {
...
mongoose.disconnect();
});
4

2 回答 2

6

试试这样:

var db = mongoose.connect('mongodb://localhost:27017/myDatabase'); 
MyModel.findOne({}, function () {
    // todo
    db.disconnect();
});
于 2013-11-27T02:46:29.050 回答
3
var db = mongoose.createConnection('mongodb://localhost:27017/myDatabase'); 

MyModel.findOne({}, function () {

     // Processing to be done

     db.close();
});
于 2014-04-19T14:13:12.233 回答