Node.js 猫鼬断开连接不工作

Node.js 猫鼬断开连接不工作,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,在完成数据库工作后,我试图断开mongoose连接,但似乎不起作用 var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/myDatabase'); var MyModel = mongoose.model('MyModel', MySchema); //do something here mongoose.disconnect(); 第一次一切正常,但是当第二次运行代码时,我

在完成数据库工作后,我试图断开mongoose连接,但似乎不起作用

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')

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

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

MyModel.findOne({}, function () {
...
mongoose.disconnect();
});
试着这样做:

var db = mongoose.connect('mongodb://localhost:27017/myDatabase'); 
MyModel.findOne({}, function () {
    // todo
    db.disconnect();
});

既然你已经找到了你的解决方案,你应该在下面作为答案发布,而不是编辑问题描述。事实上,因为这个解决方案看起来像是来自Lancelex的答案,你应该接受/支持这个答案。Gary,你应该将其中一个答案标记为正确。一般来说,使用答案来规避评论的最低代表要求是不好的。然而,在这种情况下,我认为将此添加为答案是合理的,因为如果它是正确的,它可能是尚未发布的解决方案的必要部分。然而,需要澄清的一点是:您说“我必须添加回复”,但请注意堆栈溢出有问答格式,而不是讨论线程格式,以及“回答”并不意味着“回答”;它意味着你实际上是在回答这个问题。请阅读该页面以更好地了解网站的格式。
var db = mongoose.connect('mongodb://localhost:27017/myDatabase'); 
MyModel.findOne({}, function () {
    // todo
    db.disconnect();
});
var db = mongoose.createConnection('mongodb://localhost:27017/myDatabase'); 

MyModel.findOne({}, function () {

     // Processing to be done

     db.close();
});