索引处理程序未定义或未导出

Posted

技术标签:

【中文标题】索引处理程序未定义或未导出【英文标题】:Index handler is undefined or not exported 【发布时间】:2020-06-25 04:48:23 【问题描述】:

我有一个运行良好的 lambda 函数,但我想导入一个包,所以我用 index.js 创建了一个目录并安装了我的 npm 包。

然后创建此文件夹的 zip 并使用

上传

aws lambda update-function-code --function-name smrtfac-test --zip-file fileb://lambda.zip

但是现在我收到了这个错误

index.handler is undefined or not exported

这可能是什么原因? 我的index.jsnode_modules 在同一个目录中。

【问题讨论】:

【参考方案1】:

这通常发生在您压缩目录时,而不是压缩目录的内容。当您打开 zip 文件浏览内容时,index.js 文件应位于 zip 文件的根目录中,而不是文件夹中。

【讨论】:

我用来解决问题的命令(从目录中运行):zip -r -D lambda.zip * 这对我有用,但是我的 bin 目录中有很多符号链接都指向图像魔法,并且没有 -y 标志,它最终对于 lambda 来说太大了。所以是的......包括 -y 标志。 由于 zip 在 Windows 中不起作用,我使用此答案中提到的命令 ***.com/a/64475079/8810941 来压缩和解压缩内容。当然,它有一些限制,但对于压缩 lambda 函数来说已经绰绰有余了。【参考方案2】:

如果您的 index.js 不直接位于根文件夹下,您也可以如下更改 Handler 部分

【讨论】:

【参考方案3】:

考虑为节点模块使用 Lambda 层:https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-path

【讨论】:

【参考方案4】:

这是因为您可能在目录中提交项目。您只需直接压缩所有文件,而不是将它们压缩到目录中。索引文件需要位于根目录才能被 lambda 读取和访问。

【讨论】:

【参考方案5】:

如果您在 CDK 中使用 typescript,请确保您没有在主函数文件中导出另一个函数。

【讨论】:

以上是关于索引处理程序未定义或未导出的主要内容,如果未能解决你的问题,请参考以下文章

预定义的类型“System.Object”未定义或未导入

Asp.net MVC 中的 jquery 验证错误 - 无法获取属性“调用”的值:对象为空或未定义

编译错误子或未定义函数

PLS-00221 'to_date' 不是程序或未定义的错误,并转换以句点分隔的日期

如何根据输入为字符串或未定义来创建返回字符串或未定义的打字稿函数?

PLS-00221:“DISPLAY_TRANS”不是过程或未定义