我想在 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
中可用。 (快捷应用程序)?
这是一个老问题,但我刚刚弄清楚。像这样使用 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() 。