Essentially, my MongoDB connection closed in my Node.js app, right before a query was called, like this:
// connection dropped
yield Thing.findOneAndUpdate({ foo: 'bar' }, { foo: 'baz' })
The promise just hung there and never resolved, even after the connection was re-established (it didn't throw an error either).
I think my desired behavior here is for it throw an error when trying to run a command or query if there is no connection, so that's my question: how can I make it throw?
For one, I thought Mongoose would buffer commands and then execute them anyway when the connection is re-established, but that never happened either. According to this issue in the Mongoose GitHub, you can set bufferCommands: false
and set the option on the connection bufferMaxEntries: 0
it would give me the desired "throw error if there is no connection during a command" behavior, but it didn't seem to do so either.
Any ideas?
Notes:
Using Mongoose v4.6.3 and Node v6.7.0, and my Mongoose config looks like this
{
server: {
poolSize: 20,
socketOptions: {
// 5 mins
keepAlive: 300000,
// 30 seconds
connectTimeoutMS: 30000
}
},
replset: {
socketOptions: {
keepAlive: 300000,
connectTimeoutMS: 30000
}
}
}