触发错误的测试甚至JSON:
{
"body": "{\"email\": \"[email protected]\"}"
}
错误:
Response
{
"errorType": "TypeError",
"errorMessage": "PutCommand is not a constructor",
"trace": [
"TypeError: PutCommand is not a constructor",
" at exports.handler (/var/task/index.js:16:19)",
" at Runtime.handleOnceNonStreaming (file:///var/runtime/index.mjs:1147:29)"
]
}
目录结构: 处理等待列表 节点模块 [各种其他目录,包括@aws-sdk] 索引.js
index.js的内容:
const { DynamoDBClient, PutCommand } = require("@aws-sdk/client-dynamodb");
const client = new DynamoDBClient({ region: "us-east-2" });
exports.handler = async (event) => {
const requestBody = JSON.parse(event.body);
const email = requestBody.email;
const params = {
TableName: "WaitingList",
Item: {
email: { S: email }
}
};
const command = new PutCommand(params);
try {
await client.send(command);
return {
statusCode: 200,
body: JSON.stringify("Successfully added to the waiting list"),
};
} catch (error) {
return {
statusCode: 500,
body: JSON.stringify(`An error occurred: ${error}`),
};
}
};
我如何设置上传的 .zip 文件: 在终端中,我创建了index.js,然后在同一目录中运行它: npm 初始化 -y npm install @aws-sdk/client-dynamodb zip -r lambda-package.zip index.js node_modules/
各种其他信息:
我尝试过的:
我正在尝试设置一个等待列表,用户可以在其中输入电子邮件并将其添加到数据库中。我正在使用 React 来做到这一点。我的计划是创建一个 DynamoDB 表来保存等待列表电子邮件,创建一个 Lambda 函数来与 DynamoDB 表交互,创建一个 API 网关来将 Lambda 函数公开为 REST API,并使用我的 React .js 将数据发送到API。除了 Lambda 函数部分之外,一切都很顺利,因为我的 Lambda 函数未通过测试。
@jarmod 的评论导致了修复。使用适用于 JavaScript v3 的 AWS 开发工具包将项目放入 DynamoDB 的实际命令是 PutItemCommand。
PutCommand 不是构造函数,这意味着我尝试实例化的类或函数在您使用的 SDK 版本中不存在。造成混乱的原因是 PutCommand 的在线文档以及对 PutItemCommand 缺乏了解。
用 PutItemCommand 替换 PutCommand 可以解决问题。