使用ES6/Node.js v16对lambda进行无服务器部署

js4nwp54  于 2023-02-08  发布在  Node.js
关注(0)|答案(1)|浏览(136)

新手问题...
我有一个本地工作的node.js应用程序,我现在试图将其快速部署到AWS lambda。我已经使用本指南部署了一个测试版本(成功了)。
我现在正在尝试实现我的应用程序,它使用ES6(类型为:package.json中的模块)。
在我的申请表中,我添加了

import serverless from 'serverless-http'

但我想不出导出的正确语法-原来的是...

module.exports.handler = serverless(app);

我试过:

const handler = async (app) =\> {
return serverless(app)
}

export default handler

收到错误消息:
2022 - 11 - 05T15:50:25.962Z未定义错误未捕获异常

"errorType": "Runtime.HandlerNotFound",
"errorMessage": "app.handler is undefined or not exported",

"stack": [
    "Runtime.HandlerNotFound: app.handler is undefined or not exported",
    "    at Object.UserFunction.js.module.exports.load (file:///var/runtime/index.mjs:979:15)",
    "    at async start (file:///var/runtime/index.mjs:1137:23)",
    "    at async file:///var/runtime/index.mjs:1143:1"
]

我强烈怀疑我错过了一些基本的理解-真正感谢一些指导。

5gfr0r5j

5gfr0r5j1#

错误的原因是当AWS Lambda需要命名导出时,您发送的是默认导出。
该问题与所有ES6导入/导出相同:

// export.js
export default const defaultExport = "foo"
export const namedExport = "bar"

// import.js
import { defaultExport } from "./export.js" // error, cannot find defaultExport
import { namedExport } from "./export.js" // success, found namedExport
import defaultExport from "./export.js" // success, found defaultExport

因此,这就像上面的情况,您发送defaultExport,但AWS Lambda想要{ namedExport }。您只需要从导出中删除default,并确保正确构建处理程序。

const lambda = serverless(app)

export async function handler(event, context) {
  return lambda(event, context)
}

我已经测试过了,它可以使用Node18.x进行无服务器离线操作。你可以在MDN上阅读更多关于导出的信息。

相关问题