AWS Lambda 函数:TypeError:PutCommand 不是构造函数

问题描述 投票:0回答:1

触发错误的测试甚至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/

各种其他信息:

  • CORS 完全开放
  • 运行时是 Node.js 18.x
  • 处理程序是index.handler
  • 在 CloudWatch 日志中,我看到:“@log [number]:/aws/lambda/handleWaitingList”以及测试中的相同错误。
  • 在本地主机上提交时,它显示:“添加到等待列表时发生错误。”
  • 我设置了 API Gateway 和 DynamoDB

我尝试过的:

  • 尝试使用 import/require 语句而不上传 zip
  • 将 import 切换为 require 语句,反之亦然
  • 从 .js 切换到 .mjs
  • 以各种方式重新安装 aws-sdk(例如,其他 npm 安装)
  • 检查index.js的文件编码
  • 创建图层,我以前从未做过,所以可能是错误的

我正在尝试设置一个等待列表,用户可以在其中输入电子邮件并将其添加到数据库中。我正在使用 React 来做到这一点。我的计划是创建一个 DynamoDB 表来保存等待列表电子邮件,创建一个 Lambda 函数来与 DynamoDB 表交互,创建一个 API 网关来将 Lambda 函数公开为 REST API,并使用我的 React .js 将数据发送到API。除了 Lambda 函数部分之外,一切都很顺利,因为我的 Lambda 函数未通过测试。

amazon-web-services rest aws-lambda amazon-dynamodb aws-api-gateway
1个回答
0
投票

@jarmod 的评论导致了修复。使用适用于 JavaScript v3 的 AWS 开发工具包将项目放入 DynamoDB 的实际命令是 PutItemCommand

PutCommand 不是构造函数,这意味着我尝试实例化的类或函数在您使用的 SDK 版本中不存在。造成混乱的原因是 PutCommand 的在线文档以及对 PutItemCommand 缺乏了解。

用 PutItemCommand 替换 PutCommand 可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.