簡體   English   中英

“TypeError:hashConstructor 不是構造函數”,在 AWS-Lambda 上使用“@aws-sdk/signature-v4”時出錯

[英]"TypeError: hashConstructor is not a constructor", error when using "@aws-sdk/signature-v4" on AWS-Lambda

我正在使用"@aws-sdk/signature-v4"包的 TypeScript 中開發 lambda,當我嘗試在 lambda 控制台中運行已部署的 lambda 時,我收到以下錯誤:

  "errorType": "TypeError",
  "errorMessage": "hashConstructor is not a constructor",
  "trace": [
    "TypeError: hashConstructor is not a constructor",
    "    at getPayloadHash (/var/task/node_modules/@aws-sdk/signature-v4/dist-cjs/getPayloadHash.js:17:26)",
    "    at SignatureV4.signRequest (/var/task/node_modules/@aws-sdk/signature-v4/dist-cjs/SignatureV4.js:93:71)"
  ]
}

到目前為止,我已經研究了這個包的已知問題,我在 Github 上遇到了這個https://github.com/aws/aws-sdk-js-v3/issues/3590 我也在使用"@aws-crypto/sha256-js"包,它應該提供一種解決方法,但到目前為止似乎對這個錯誤沒有任何影響。 "esModuleInterop": true在我的tsconfig.json中設置,因為"@aws-crypto/sha256-js"是一個 commonJS 模塊。 任何幫助,將不勝感激!

包的導入方式:

import * as crypto from "@aws-crypto/sha256-js";
const { Sha256 } = crypto;

更新

我已經注銷了以下SignatureV4對象

const signer = new SignatureV4({
    credentials: defaultProvider(),
    region: AWS_REGION,
    service: "appsync",
    sha256: Sha256,
  });

我看到 Sha256 未定義。 我想看看為什么會這樣。

解決了

我不得不改變我導入軟件包的方式,這是一個非常愚蠢的錯誤,我希望通過發布這個其他人可以避免做我所做的事情。

行之有效的方式

import crypto from "@aws-crypto/sha256-js";
const { Sha256 } = crypto;

不起作用的方式在這篇文章的開頭。

像這樣導入包

import crypto from "@aws-crypto/sha256-js";
const { Sha256 } = crypto;

而不是這樣

import * as crypto from "@aws-crypto/sha256-js";
const { Sha256 } = crypto; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM