typescript - "TypeError: hashConstructor không phải là một constructor", lỗi khi sử dụng "@aws-sdk/signature-v4" trên AWS-Lambda
Tôi đang phát triển một lambda bằng TypeScript sử dụng gói "@aws-sdk/signature-v4" và khi tôi cố gắng chạy lambda đã triển khai trong bảng điều khiển lambda, tôi nhận được lỗi sau:
"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)"
]
}
Cho đến nay tôi đã xem xét các vấn đề đã biết của gói này và tôi đã gặp được liên kết này https://github.com/aws/aws-sdk-js-v3/issues/3590 trên Github. Tôi cũng đang sử dụng gói "@aws-crypto/sha256-js" vốn được cho là cung cấp một giải pháp tạm thời, nhưng cho đến nay có vẻ như không có tác dụng gì đối với lỗi này. "esModuleInterop": true đã được thiết lập trong tsconfig.json của tôi vì "@aws-crypto/sha256-js" là một module commonJS. Mọi sự giúp đỡ sẽ được đánh giá cao!
Cách các gói đang được nhập:
import * as crypto from "@aws-crypto/sha256-js";
const { Sha256 } = crypto;
CẬP NHẬT
Tôi đã đăng xuất đối tượng SignatureV4 sau đây
const signer = new SignatureV4({
credentials: defaultProvider(),
region: AWS_REGION,
service: "appsync",
sha256: Sha256,
});
và tôi thấy rằng Sha256 đang xuất hiện dưới dạng không xác định. Tôi đang cố gắng tìm hiểu tại sao lại như vậy.
ĐÃ GIẢI QUYẾT
Tôi đã phải thay đổi cách tôi đang nhập các gói, một sai lầm khá ngu ngốc và tôi hy vọng bằng cách đăng điều này, người khác sẽ tránh được việc làm những gì tôi đã làm.
Cách mà đã hiệu quả
import crypto from "@aws-crypto/sha256-js";
const { Sha256 } = crypto;
Cách mà không hiệu quả nằm ở phần đầu của bài viết này.
Câu trả lời #1
Nhập các gói như thế này
import crypto from "@aws-crypto/sha256-js";
const { Sha256 } = crypto;
Và không phải như thế này
import * as crypto from "@aws-crypto/sha256-js";
const { Sha256 } = crypto;
