我正在尝试使用mongoose(MongoDB)和AWS lambda函数实现连接到数据库的功能。据我所知,最佳实践是缓存数据库,以便可以重用连接。这个,我有工作。但是,问题是mongoose.readyState变量使用一些固定的时间来确定连接是否有效。
我想知道是否有替代.readyState来检查连接是否有效。我知道每次我想重用连接时,我都可以尝试对数据库运行随机查询。因此,我可以确定是否发生异常。然而,这感觉有点hackish。
这是我连接到数据库的功能:
let cacheDb = null
let options = {
useMongoClient: true,
autoIndex: true,
autoReconnect: true,
keepAlive: true,
socketOptions: {
keepAlive: true,
autoReconnect: true,
connectTimeoutMS: 30000
},
reconnectTries: Number.MAX_VALUE,
reconnectInterval: 200,
poolSize: 1,
bufferMaxEntries: 0,
};
mongoose.Promise = global.Promise
module.exports = {
connectToDatabase: function connectToDatabase(context) {
context.callbackWaitsForEmptyEventLoop = false
if (cacheDb && mongoose.connection.readyState == 1) {
return cacheDb
}
else {
mongoose.connect(process.env['MONGODB_URI'], options, function(error){
if(error){
console.log(error.toString())
}
cacheDb = mongoose.connection
return cacheDb
})
}
}
}

您对替代方法有什么想法吗?
答案 0 :(得分:1)
为了检查有效连接,您应该检查缓存的db serverConfig.isConnected方法。
像这样:
if (cachedDb && cachedDb.serverConfig.isConnected()) { ...
这是根据mongodb撰写的,在这篇有用的文章中: https://www.mongodb.com/blog/post/optimizing-aws-lambda-performance-with-mongodb-atlas-and-nodejs