猫鼬lambda示例每次触发都会创建一个新连接

时间:2019-08-28 13:41:41

标签: mongoose aws-lambda serverless-framework nestjs

我一直在关注官方的猫鼬文档,并在我的处理程序中建立了猫鼬连接:

这是在我的处理程序文件的根目录中。

let conn = null;
const uri = process.env.ORDERS_URI;

mongoose.connection.on('connected', () => {
  Logger.log('Mongoose default connection open to ' + uri);
});

现在在我的实际处理函数中:

export const handler: Handler = async (event: any, context: Context) => {
  if (conn == null) {
    console.log('CONN IS NULL');
    conn = await mongoose.connect(uri, {
      bufferCommands: false, // Disable mongoose buffering
      bufferMaxEntries: 0, // and MongoDB driver buffering
      useNewUrlParser: true,
    });
  }

  context.callbackWaitsForEmptyEventLoop = false;
  cachedServer = await bootstrapServer();
  return proxy(cachedServer, event, context, 'PROMISE').promise;
};

但是,在使用无服务器脱机进行测试后,每次点击我都会建立一个新的连接。

命中1:1条新的“ connected to mongoose”消息 命中2:2条新的“ connected to mongoose”消息...

以此类推...

我尝试过一些变化来移动它们,但是无论哪种方式,我最终还是遇到相同的“错误”。

如果我改用mongoose.createConnection -实际上,连接到数据库在我放置它的任何地方都无法使用。

1 个答案:

答案 0 :(得分:1)

这是因为无服务器脱机执行需要在每次调用时使缓存无效。在AWS Lambda上并非如此。您可以使用--skipCacheInvalidation禁用此行为,但似乎是be gone anyway