无法在AWS Lambda中使用NPM包,require()已损坏



我创建了一个非常基本的NPM包,只有两个文件

index.js:

module.exports = {
errors: {
HttpError: require('./src/errors').HttpError,
test: 'value'
}
}

src/errors.js:

class HttpError extends Error {
constructor (message, code) {
super(message)
this.statusCode = code
if (Error.captureStackTrace) {
Error.captureStackTrace(this, HttpError)
}
}
}
exports.HttpError = HttpError

当我安装这个软件包时,我可以毫无问题地使用我的错误类。然而,当我使用Serverless创建部署包并尝试将代码作为AWS Lambda的一部分运行时,Lambda似乎无法解析HttpError类。

在我在AWS上运行的lambda函数中,当我需要包作为常量并将其注销时,日志如下所示:

{"errors":{"test":"value"}}

而在本地它看起来像:

{ errors:
{ HttpError: [Function: HttpError],
test: 'value' } }

我已经从AWS下载了部署包,可以确认它看起来与本地版本完全一样。我在lambda文档中找不到任何暗示我不能对javascript模块使用require的内容。我做错了什么?

我发现了这个错误,这完全是我自己做的,同时犯了两个不同的错误。

我正在检查我的包名称.errors.HttpError是否是我在安装包的代码中定义的相同HttpError类的实例,当然不是。这导致我注销了require((的结果,然而,我使用JSON.stringify((来完成这项操作,当然这将省略函数。因此,我认为包中的require((没有得到正确解决。

最新更新