【问题标题】:DynamoDB InvalidParameterType Error While Trying To Put A New Item尝试放置新项目时出现 DynamoDB InvalidParameterType 错误
【发布时间】:2019-11-14 08:20:47
【问题描述】:

我正在尝试实现一个基于 DynamoDB 的应用程序来存储一些请求数据。我阅读了DynamoDB官方文档,目前正在关注this官方教程做一些基本操作。

我正在使用本地 DynamoDB docker 容器。你可以这样运行它:

docker run -d -p 8000:8000 amazon/dynamodb-local:latest -jar DynamoDBLocal.jar -sharedDb

当我尝试按照上面给出的教程创建一个新表时,我没有收到任何错误,一切都很好:

var params = {
TableName: 'book',
KeySchema: [
    {
        AttributeName: 'title',
        KeyType: 'HASH',
    }
],
AttributeDefinitions: [
    {
        AttributeName: 'title',
        AttributeType: 'S'
    }
],
ProvisionedThroughput: {
    ReadCapacityUnits: 1, 
    WriteCapacityUnits: 1, 
}

};
dynamodb.createTable(params, function(err, data) {
    if (err) print(err); // an error occurred
    else print(data); // successful response

});

但是当我尝试在其中放入一些新项目时:

var params = {
TableName: 'book',
Item: { // a map of attribute name to AttributeValue
    title: "Sample Application: CloudList",
    chapter: 10
    }
};

dynamodb.putItem(params, function(err, data) {
    if (err) print(err); // an error occurred
    else print(data); // successful response
});

我收到了这个错误:

31 验证错误实际上等于标题中的字符数:Sample Application: CloudList。 DynamoDB shell 也无法识别上述教程中给出的打印功能。所以我不得不用 ppJson 函数替换它。我在哪里做错了,如何通过 Web Shell 从 DynamoDB 放置/删除/获取项目? (也可以通过 PHP 代码)


编辑:我也尝试了 Vikdor 在评论中所说的,似乎我摆脱了 UnexpectedParameter 错误但这次我得到了 Invalid attribute value type 错误。

var params = {
    TableName: 'book',
    Item: { // a map of attribute name to AttributeValue
        'title': {S: "Sample Application: CloudList"},
        'chapter': {N: '10'}
    }
};

【问题讨论】:

    标签: javascript php database amazon-dynamodb


    【解决方案1】:

    这个doc 解释了传递给API 的paramsItem 键的结构,您的params 应如下所示:

    var params = {
        TableName: "book",
        Item: { 
            "title": {"S": "Sample Application: CloudList"},
            "chapter": {"N": :10"}
        }
    };
    

    请注意,即使是数字也应该用引号括起来。

    【讨论】:

    • 感谢您的回复。现在我收到Invalid attribute value type 错误。但根据该文档,似乎一切都是正确的。我找不到这里有什么问题。
    • 您能否使用更正的params 值对您的答案进行编辑,以查看参数构造还有什么问题? @JollyRoger
    • 我在您的答案中使用了确切的参数值。我还应该将其添加到问题中吗?
    • 哦!好的。它只是使您的问题完整,仅此而已! @JollyRoger
    • 我更新了 params 值以使用所有双引号,即使是类型,并验证它使用 AWS 命令​​行 JSON 工作。 @JollyRoger
    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    相关资源
    最近更新 更多