【问题标题】:Mongoose disconnect does not work猫鼬断开连接不起作用
【发布时间】: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 的答案,因此您应该接受/支持该答案。
  • 加里,你应该将其中一个答案标记为正确。

标签: node.js mongodb mongoose


【解决方案1】:
var db = mongoose.createConnection('mongodb://localhost:27017/myDatabase'); 

MyModel.findOne({}, function () {

     // Processing to be done

     db.close();
});

【讨论】:

  • 一般来说,使用答案来规避 cmets 的最低代表要求是不行的。但是,在这种情况下,我认为将其添加为答案是合法的,因为 如果 它是正确的,它可能是尚未发布的解决方案的必要部分。
  • 但是,需要澄清一点:您说“我必须添加回复”,但请注意 Stack Overflow 采用问答格式,而不是讨论线程格式,并且“ answer”不代表“回复”;这意味着您实际上是在为问题提供答案。请阅读About 页面以更好地了解该网站的格式。
【解决方案2】:

试试这样:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    相关资源
    最近更新 更多