AWS Lambda回调被打开的mongodb连接阻止?

AWS Lambda回调被打开的mongodb连接阻止?,mongodb,lambda,aws-lambda,Mongodb,Lambda,Aws Lambda,我已经设置了一个AWS lambda来为我保存一些数据到MongoDB。我想重用连接,这样我就不必每次调用lambda时都创建一个新连接。但是如果我让db连接保持打开状态,Lambda处理程序的回调将不起作用 是不是我做错了什么导致了这种行为?这是我的密码: var MongoClient = require('mongodb').MongoClient exports.handler = (event, context, callback) => { MongoClient.c

我已经设置了一个AWS lambda来为我保存一些数据到MongoDB。我想重用连接,这样我就不必每次调用lambda时都创建一个新连接。但是如果我让db连接保持打开状态,Lambda处理程序的回调将不起作用

是不是我做错了什么导致了这种行为?这是我的密码:

var MongoClient = require('mongodb').MongoClient

exports.handler = (event, context, callback) => {
    MongoClient.connect(process.env.MONGOURL, function (err, database) {
        //database.close();
        callback(null, "Successful db connection")
    });
}

这是由于未设置
context.callbackaitsforeptyeventloop=false
造成的。如果保留默认值
true
,则回调不会导致Lambda返回响应,因为您的数据库连接正在防止事件循环为空


这是由于未设置
context.callbackhaitsforemptyeventloop=false
造成的。如果保留默认值
true
,则回调不会导致Lambda返回响应,因为您的数据库连接正在防止事件循环为空


“Lambda函数代码中的任何声明(处理程序代码之外,请参阅编程模型)保持初始化状态,在再次调用函数时提供额外的优化。例如,如果Lambda函数建立数据库连接,而不是重新建立连接,则在后续调用中使用原始连接。您可以在代码中添加逻辑,以在创建之前检查连接是否已存在简单地说,适用于一般nodejs应用程序的模块化代码(或函数)之间持久化和共享连接的相同答案也适用于这里。看见只是您要实现的
getDB()
函数需要在任何“处理程序”代码的“外部”声明,在处理程序中,您只需获取该连接的当前“实例”,即“持久化”。就像文档所说的那样。@NeilLunn Lambda必须被告知不要等待事件循环为空,而是继续返回结果并冻结容器。@Michael sqlbot不是这里的“我正在寻址”这一点。我要解决的是“我想重用连接,这样我就不必(原文如此)在每次调用lambda时都创建一个新的连接”,这显然是问题中的误解,即需要与每个函数调用建立连接。“显然这不是真的。我明白你在说什么,”尼尔伦。我将感知到的“需要”解释为当连接未关闭时,函数不能按预期工作这一事实的反应,而不是错误地认为应该/将会有这样的需要。Lambda函数代码中的任何声明(处理程序代码之外,请参阅编程模型)保持初始化状态,在再次调用函数时提供额外的优化。例如,如果Lambda函数建立数据库连接,而不是重新建立连接,则在后续调用中使用原始连接。您可以在代码中添加逻辑,以在创建之前检查连接是否已存在简单地说,适用于一般nodejs应用程序的模块化代码(或函数)之间持久化和共享连接的相同答案也适用于这里。看见只是您要实现的
getDB()
函数需要在任何“处理程序”代码的“外部”声明,在处理程序中,您只需获取该连接的当前“实例”,即“持久化”。就像文档所说的那样。@NeilLunn Lambda必须被告知不要等待事件循环为空,而是继续返回结果并冻结容器。@Michael sqlbot不是这里的“我正在寻址”这一点。我要解决的是“我想重用连接,这样我就不必(原文如此)在每次调用lambda时都创建一个新的连接”,这显然是问题中的误解,即需要与每个函数调用建立连接。“显然这不是真的。我明白你在说什么,”尼尔伦。我将感知到的“需要”解释为当连接未关闭时,函数不能按预期工作这一事实的反应,而不是错误地认为应该/将会有这样的需要。