Moongose就绪状态和aws lambda - 缓存连接

时间:2017-11-23 19:20:20

标签: mongodb amazon-web-services mongoose lambda

我正在尝试使用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
            })
        }
    }
}




您对替代方法有什么想法吗?

1 个答案:

答案 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