完成后正确关闭mongoose的连接

hs1rzwqc  于 2022-12-27  发布在  Go
关注(0)|答案(8)|浏览(351)

我在一个不打算连续运行的脚本中使用mongoose,我面临着一个看似非常简单的问题,但我却找不到答案;简单地说,一旦我调用了任何向mongodb发送请求的mongoose函数,我的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驱动程序并没有实际关闭连接时,你问它是否还有查询运行。
它甚至根本不记得断开连接调用,一旦查询运行完毕,它就不执行该操作;它只是丢弃你的调用,没有抛出异常或类似的任何东西,而且从来没有真正关闭连接。
所以你有它:如果你想让disconnect()真正起作用的话,请确保在调用disconnect()之前每个查询都已经被处理过了。

yxyvkwin

yxyvkwin1#

您可以使用以下命令关闭连接

mongoose.connection.close()
rqdpfwrv

rqdpfwrv2#

另一个答案对我不起作用,我不得不使用mongoose.disconnect();,正如this answer中所述。

of1yzvn4

of1yzvn43#

您可以设置与变量的连接,然后在完成后断开连接:

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

// Do some stuff

db.disconnect();
8qgya5xd

8qgya5xd4#

正如杰克·威尔逊所说:您可以设置与变量的连接,然后在完成后断开连接:

let db;
mongoose.connect('mongodb://localhost:27017/somedb').then((dbConnection)=>{
    db = dbConnection;
    afterwards();
});

function afterwards(){

    //do stuff

    db.disconnect();
}

或者如果在异步函数内:

(async ()=>{
    const db = await mongoose.connect('mongodb://localhost:27017/somedb', { useMongoClient: 
                  true })

    //do stuff

    db.disconnect()
})

否则,当我在我的环境中检查它时,它有一个错误。

dpiehjr4

dpiehjr45#

mongoose.connection.close(function(){
console.log('Mongoose default connection disconnected through app termination');
process.exit(0);
});

这将关闭mongoose连接,并在控制台中通过消息通知您。

cclgggtu

cclgggtu6#

如果你试图在方法外关闭/断开连接,你会得到一个错误。最好的解决方案是在方法的两个回调中关闭连接。伪代码在这里。

const newTodo = new Todo({text:'cook dinner'});

newTodo.save().then((docs) => {
  console.log('todo saved',docs);
  mongoose.connection.close();
},(e) => {
  console.log('unable to save');
});
rks48beu

rks48beu7#

我使用的是4.4.2版本,其他的答案对我都不起作用,但是将useMongoClient添加到选项中,并将其放入一个变量中,您可以在该变量上调用close

var db = mongoose.connect('mongodb://localhost:27017/somedb', { useMongoClient: true })

//do stuff

db.close()
57hvy0tb

57hvy0tb8#

可能你有这个:

const db = mongoose.connect('mongodb://localhost:27017/db');

// Do some stuff

db.disconnect();

但你也可以这样做

mongoose.connect('mongodb://localhost:27017/db');

const model = mongoose.model('Model', ModelSchema);

model.find().then(doc => {
  console.log(doc);
}

你不能调用db.disconnect()但是你可以在使用后关闭连接.

model.find().then(doc => {
  console.log(doc);
}).then(() => {
  mongoose.connection.close();
});

相关问题