【问题标题】:Mongoose Connection outside NestJS for Lambda用于 Lambda 的 NestJS 之外的 Mongoose 连接
【发布时间】:2020-01-06 23:47:24
【问题描述】:

我们在 AWS Lambda 上运行 nest.js,类似于:https://keyholesoftware.com/2019/05/13/aws-lambda-with-nestjs/

不幸的是,nest.js 的 Mongoose 部分没有关闭数据库连接,所以我的 MongoDB 集群达到了连接限制,即使没有人在处理它。

Mongoose 文档的最佳实践是这样说的(在上下文之外定义):https://mongoosejs.com/docs/lambda.html

有人知道如何结合nest.js 框架实现这一点吗?

【问题讨论】:

  • 请分享一些代码,以便我们提供适当的帮助:)

标签: mongodb mongoose lambda nestjs


【解决方案1】:

我的第一印象是明确关闭连接,或设置超时。但是,对于这些选项中的任何一个,我似乎都找不到任何接近nest.js 官方文档的内容。

所以:您有一个不会自动关闭空闲连接的数据库和一个从不关闭连接的中间件,因此您的系统正在被堵塞。您可以尝试在它们之间放置一些东西,等待空闲并断开连接(甚至可能会说服某些防火墙这样做)。但是,考虑到这些产品的正确连接处理是多么不可能和/或没有记录,我建议您重新考虑您的技术选择。

【讨论】:

    【解决方案2】:

    你必须在你的函数被执行后调用app.close()来关闭猫鼬连接。

    AWS Cognito Lambda 触发器示例:

        import { INestApplicationContext } from '@nestjs/common';
    
        let cachedApp: INestApplicationContext;
        async function bootstrap() {
          if (!cachedApp) {
            cachedApp = await NestFactory.createApplicationContext(
              PreTokenGenerationModule
            );
          }
          return cachedApp;
        }
    
        export async function handler(
           event: CognitoUserPoolTriggerEvent,
           context: Context,
           callback: Callback
        ) {
           const app = await bootstrap();
           const preTokenGenerationService = app.get(PreTokenGenerationService);
           await preTokenGenerationService.execute(event, context, callback);
           app.close();
        }
    

    【讨论】:

      猜你喜欢
      • 2021-02-17
      • 2016-09-13
      • 1970-01-01
      • 2021-06-27
      • 2019-01-22
      • 2020-12-05
      • 2015-12-15
      • 1970-01-01
      • 2011-03-30
      相关资源
      最近更新 更多