[英]"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.