【问题标题】:Unable to use NPM package inside AWS Lambda, require() broken无法在 AWS Lambda 中使用 NPM 包,require() 已损坏
【发布时间】:2019-05-16 18:35:19
【问题描述】:

我创建了一个非常基本的 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

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

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

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

而在本地看起来像:

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

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

【问题讨论】:

    标签: javascript node.js amazon-web-services npm aws-lambda


    【解决方案1】:

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

    我正在检查我的 package-name.errors.HttpError 是否是我在安装包的代码中定义的相同 HttpError 类的实例,当然不是。这导致我注销 require() 的结果,但是,我使用 JSON.stringify() 来执行此操作,这当然会 omit 函数。因此,我认为我的包内的 require() 以某种方式没有被正确解析。

    【讨论】:

      猜你喜欢
      • 2016-06-26
      • 2020-03-18
      • 1970-01-01
      • 2021-09-26
      • 2017-06-04
      • 1970-01-01
      • 2022-08-10
      • 1970-01-01
      • 2022-08-17
      相关资源
      最近更新 更多