我对这个问题有点绝望:我们正在为我们的 API 运行 AWS Lambda,该 API 与 MongoDB Atlas (M20) 上的 MongoDB 集群通信。为了防止在每次 Lambda 调用时创建新连接,我们遵循以下模式:https : //docs.atlas.mongodb.com/best-practices-connecting-to-aws-lambda/在 Lambda 的生命周期内缓存连接容器。我们对它略有不同:
async function getProdDB() {
const url = `mongodb+srv://${process.env.DB_USER}:${process.env.DB_PASSWORD}@xxxxx-yyyy.zzzzz.net?retryWrites=true`
if (!cachedDb || !cachedDb.serverConfig.isConnected()) {
cachedClient = await MongoClient.connect(
url,
{ useNewUrlParser: true, useUnifiedTopology: true }
)
cachedDb = cachedClient.db(process.env.DB_NAME)
}
return cachedDb
}
Run Code Online (Sandbox Code Playgroud)
这也检查我们是否已连接。现在这在 98% 的情况下都有效,但我们的 Lambda 调用时不时会超时。我们试图诊断一下:
cachedDB.serverConfig.isConnected()返回 rue`