基本上,在调用查询之前,我的Node.js应用程序中的MongoDB连接已关闭,如下所示:
// connection dropped
yield Thing.findOneAndUpdate({ foo: 'bar' }, { foo: 'baz' })
即使在重新建立连接之后,承诺只是挂在那里并且从未解决过(它也没有抛出错误)。
我认为我想要的行为是因为它在尝试运行命令或查询时抛出错误,如果没有连接,那么这是我的问题:我怎么能让它抛出?
首先,我认为Mongoose会缓冲命令,然后在重新建立连接时执行它们,但这种情况从未发生过。根据Mongoose GitHub中的this issue,您可以设置bufferCommands: false
并在连接bufferMaxEntries: 0
上设置选项,如果在命令期间没有连接,它将为我提供所需的“抛出错误”行为,但它似乎也没有这样做。
有什么想法吗?
注意:
使用Mongoose v4.6.3和Node v6.7.0,我的Mongoose配置看起来像这样
{
server: {
poolSize: 20,
socketOptions: {
// 5 mins
keepAlive: 300000,
// 30 seconds
connectTimeoutMS: 30000
}
},
replset: {
socketOptions: {
keepAlive: 300000,
connectTimeoutMS: 30000
}
}
}