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

THp*_*ubs 9 lambda aws-lambda serverless-framework

在我的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 });
};
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*k B 9

要么mongoose.connect在处理程序内移动代码,要么停止调用db.close(). 您当前有一个由 Lambda 函数的多次调用重复使用的单个数据库连接,但您将在第一次调用完成后关闭它。

  • 缺点是数据库将不得不在一些超时时间后自行关闭连接。 (3认同)
  • 是的,我目前的解决方案是删除 db.close()。但是保持这样可以吗?有什么缺点吗? (2认同)