将我的 nodejs/expressjs 应用程序部署到 AWS lambda 后,我收到 bcrypt 错误

问题描述

我正在尝试让我的 express.js 应用程序在 AWS Lambda 上运行。部署(使用 serverless framework 成功完成,但是当我测试我的请求时应用程序返回 500 internal error。我的日志显示了这个错误

/var/task/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node: invalid ELF header

我已尝试将 bcrypt 替换为 bcryptjs,但问题仍然存在。

此外,在我的 serverless.yml 中,我添加了以下行以强制 lambda 自行安装 bcrypt,但显然它没有成功:

package:
  exclude:
    - node_modules/**

有什么建议吗?

解决方法

首先,请包含节点模块。除了 aws-sdk 之外,AWS 不会在 lambda 节点环境中安装任何东西。

其次,您看到此错误是因为您可能是在 mac OS 机器上开发的,因此您机器上的 bycrypt 二进制文件最终会上传到 lambda。

请仔细检查当您尝试 bcryptjs 时,您是否从项目依赖项中完全删除了 bcrypt