一旦你完成,正确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();