NestJS for Lambda外部的猫鼬连接

时间:2019-09-04 06:05:38

标签: mongodb mongoose lambda nestjs

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

不幸的是,nest.js的Mongoose部分不会关闭数据库连接,因此即使没有人在我的MongoDB集群上也达到了连接限制。

猫鼬文档的最佳做法是这样的(在上下文之外定义):https://mongoosejs.com/docs/lambda.html

有人知道如何与nest.js框架结合使用吗?

2 个答案:

答案 0 :(得分:0)

我的第一印象是显式关闭连接或设置超时。但是,对于这两个选项,我似乎都找不到任何接近nest.js官方文档的东西。

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

答案 1 :(得分:0)

在执行函数以关闭猫鼬连接之后,必须调用 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();
    }