一旦你完成,正确closuresmongoose的连接

我在一个脚本中使用mongoose,它并不意味着连续运行,而且我面对的似乎是一个非常简单的问题,但我找不到答案。 简单地说,一旦我打电话给任何发送请求mongodb的函数,我的nodejs实例永远不会停止,我必须用Ctrl + c或Program.exit()手动杀死它。

代码大致如下所示:

var mongoose = require('mongoose'); // if my program ends after this line, it shuts down as expected, my guess is that the connection is not really done here but only on the first real request ? mongoose.connect('mongodb://localhost:27017/somedb'); // define some models // if I include this line for example, node never stop afterwards var MyModel = mongoose.model('MyModel', MySchema); 

我尝试添加调用到mongoose.disconnect()但没有结果。 除此之外,一切工作正常(查找,保存,…)。

这个问题和这个人完全一样,可惜他没有收到任何答案: https : //groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661

谢谢

编辑:接受下面的答案,因为它在技术上是正确的,但如果有人再次遇到这个问题,似乎mongoose和/或mongodb驱动程序实际上并没有closures连接,当你问是否仍然有查询运行。

它甚至完全不记得断开连接的调用,一旦查询完成,它不会执行; 它只是抛弃你的调用,不会抛出任何exception,也不会真正closures连接。

所以你有它:确保每个查询已经处理之前调用disconnect()如果你想它实际工作。

您可以closures连接

 mongoose.connection.close() 

另一个答案不适合我。 我不得不使用mongoose.disconnect(); 正如在这个答案中所述 。

您可以将连接设置为variables,然后在完成后断开连接:

 var db = mongoose.connect('mongodb://localhost:27017/somedb'); // Do some stuff db.disconnect();