如何在lambda函数中正确关闭数据库连接?

如何在lambda函数中正确关闭数据库连接?,lambda,aws-lambda,serverless-framework,Lambda,Aws Lambda,Serverless Framework,在lambda函数中,我尝试在发送回调后立即关闭mongo连接。但它有一个问题 当我发送请求时,函数将执行其职责,发送回调并关闭数据库连接 当发送第二个请求时,函数超时 当我删除db.close()时,一切正常 我认为lambda会对所有函数重复使用连接,因为我在处理程序的顶部打开了连接: // Connect to database mongoose.connect(process.env.DATABASE_URL); const handleCreateUser = async (e

在lambda函数中,我尝试在发送回调后立即关闭mongo连接。但它有一个问题

  • 当我发送请求时,函数将执行其职责,发送回调并关闭数据库连接
  • 当发送第二个请求时,函数超时
  • 当我删除
    db.close()
    时,一切正常
我认为lambda会对所有函数重复使用连接,因为我在处理程序的顶部打开了连接:

// Connect to database
mongoose.connect(process.env.DATABASE_URL);


const handleCreateUser = async (event, context, callback) => {
  // eslint-disable-next-line no-param-reassign
  context.callbackWaitsForEmptyEventLoop = false;

  const data = JSON.parse(event.body);
  const { user, userProfile } = data;

  await createUser({ callback, user, userProfile });
};

知道怎么解决这个问题吗?此时我们真的必须关闭连接吗?

可能是trytry with resource,它会自动关闭连接

移动处理程序中的
mongoose.connect
code,或停止调用
db.close()
。您当前有一个数据库连接被Lambda函数的多次调用重用,但在第一次调用完成后您将关闭它。

这并不能解决问题。他已经成功地关闭了连接。问题是他试图在关闭连接后重新使用连接。是的,我当前的解决方案是删除db.close()。但是保持这样可以吗?有什么不好的地方吗?缺点是数据库必须在一段超时时间后自行关闭连接。啊。那么有没有办法看看它是否关闭并重新打开?我认为,如果db关闭连接,也会出现同样的问题。您的db关闭连接的速度可能不会快于Lambda函数容器因不活动而被破坏的速度,但如果您想添加一个检查,我会看看这个: