通过@vendia/serverless-express重用数据库连接对象

问题描述 投票:0回答:1

我想在 Lambda 函数上使用现有的 ExpressJS 代码,而 @vendia/serverless-express 似乎是正确的包。

我想重用 Lambda 调用之间的数据库连接。根据 AWS 文档和其他博客,可以通过将连接对象存储在

handler
函数之外来实现。但我不知道如何使用
@vendia/serverless-express
包来做到这一点。

他们有以下示例代码:(可以在他们的 GH 存储库中找到这里

const serverlessExpress = require('@vendia/serverless-express')
const app = require('./app')

let serverlessExpressInstance

function asyncTask () {
  return new Promise((resolve) => {
    setTimeout(() => resolve('connected to database'), 1000)
  })
}

async function setup (event, context) {
  const asyncValue = await asyncTask()
  console.log(asyncValue)
  serverlessExpressInstance = serverlessExpress({ app })
  return serverlessExpressInstance(event, context)
}

function handler (event, context) {
  if (serverlessExpressInstance) return serverlessExpressInstance(event, context)

  return setup(event, context)
}

exports.handler = handler

我可以在

asyncTask
函数中初始化连接对象。但是,我如何使其在我的
app
中可用。 (快捷应用程序)?

node.js amazon-web-services aws-lambda closures
1个回答
0
投票

这是一个老问题,但我刚刚弄清楚。像这样使用 app.set:

async function setup (event, context) {
  const asyncValue = await asyncTask()
  app.set('asyncValue', asyncValue) 
  serverlessExpressInstance = serverlessExpress({ app })
  return serverlessExpressInstance(event, context)
}

在 app.js 文件中使用匹配的 app.get() 。

© www.soinside.com 2019 - 2024. All rights reserved.