新手问题....
我有一个本地工作的node.js 应用程序,我现在正在尝试将其快速部署到AWS lambda。我已经使用本指南部署了测试版本(有效)。
我现在正在尝试实现我的应用程序,它使用 ES6(并且在 package.json 中具有 type: module)。
在我的应用程序中我添加了
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"
]
我强烈怀疑我缺少一些基本的理解 - 非常感谢一些指导。
错误的原因是,当 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 上阅读有关导出的更多信息。
我替换了这个:
module.exports.handler = serverless(app);
这样:
const lambda = serverless(app)
export async function handler(event, context) {
return lambda(event, context)
}
并且成功了