Moongose准备状态和AWS lambda-缓存连接



我正在尝试实现使用Mongoose(mongodb)和AWS lambda函数的数据库函数的连接。据我了解,最佳实践是缓存数据库,以便可以重复使用连接。我有工作。但是,问题在于猫鼬。dreadystate变量使用一些固定的时间来确定连接是否有效。

我想知道是否有替代.dreadystate可以检查连接是否有效。我知道每次我要重复使用该连接时,我都可以尝试针对数据库进行随机查询。因此,我可以确定异常是否发生。但是,这感觉有点hack。

这是我连接到数据库函数:

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
            })
        }
    }
}

您对另一种方法有任何想法吗?

,要检查有效的连接,您应该检查加速的db serverconfig.isconted方法。

喜欢:

if (cachedDb && cachedDb.serverConfig.isConnected()) { ...

这是根据MongoDB的说法,在这篇有用的文章中:https://www.mongodb.com/blog/post/optimizing-aws-lambda-performance-with-mongodb-atlas-andnodejs

最新更新