【问题标题】:Error: Expected params.Item['id'].N to be a string错误:预期 params.Item['id'].N 为字符串
【发布时间】:2017-05-16 20:41:27
【问题描述】:

这是交易:

我无法将数据添加到 DynamoDB。 JS文件在S3中,代码如下:

var date = new Date(),
    item = {
        'id': {N: date.getTime()},
        'user': {S: "Sam"}
    },
    params = {
        TableName: 'users',
        Item: item
    };
dynamodb.putItem(params,function(err,data){
    if (err) {
        console.log(err);
    } else {
        console.log("user added to DynamoDB");
    }
});

这是来自数据库的屏幕截图,这意味着 id 应该是一个数字,而不是字符串:

我得到的错误:

错误:预期 params.Item['id'].N 为字符串

at ParamValidator.fail (aws-sdk.js:96666)
at ParamValidator.validateType (aws-sdk.js:96827)
at ParamValidator.validateString (aws-sdk.js:96762)
at ParamValidator.validateScalar (aws-sdk.js:96742)
at ParamValidator.validateMember (aws-sdk.js:96709)
at ParamValidator.validateStructure (aws-sdk.js:96690)
at ParamValidator.validateMember (aws-sdk.js:96703)
at ParamValidator.validateMap (aws-sdk.js:96729)
at ParamValidator.validateMember (aws-sdk.js:96707)
at ParamValidator.validateStructure (aws-sdk.js:96690)

【问题讨论】:

    标签: amazon-web-services lambda aws-lambda


    【解决方案1】:

    我自己也遇到了这个问题。

    Dynamo 期望“N”值是一个字符串,这有点误导,因为您期望将一个数字传递给它。

    你有你的 date.getTime(),试着把它翻译成一个字符串。

    'id': { N: date.getTime().toString() },
    

    这对我有用。

    【讨论】:

    • 我刚刚遇到了同样的问题。 OMG Dynamo 有时会拉屎。
    • 我遇到了同样的问题。偶数应该作为违反直觉的字符串传递。
    • 确实是心理体操。在我使用 DynamoDB 之前,我一直很兴奋,但使用 Amplify 的替代方法是我开始为我设置的每个环境添加 Mongo Atlas 的前缀......
    【解决方案2】:

    即使您想在 DynamoDB 中将值保存数字,您仍然需要发送 字符串 到 SDK,因此,您需要:

    var date = new Date(),
        item = {
            'id': {N: date.getTime().toString()},
            'user': {S: "Sam"}
        },
        params = {
            TableName: 'users',
            Item: item
        };
    dynamodb.putItem(params,function(err,data){
        if (err) {
            console.log(err);
        } else {
            console.log("user added to DynamoDB");
        }
    });
    

    【讨论】:

      【解决方案3】:
      1. 创建 DynamoDB 表时,id 的数据类型 (据说是 HashKey?)您提供的参数可能是 String 和 不是数字。
      2. 当您尝试向表中添加项目时,您可能 将其作为数字提供(基于 new Date().getTime())。
      3. 请检查您最初发出的创建表命令。
      4. 要解决此问题,您可能需要删除表并创建它 再次使用 id 属性的正确数据类型。

      【讨论】:

      • AWS ..没有评论。
      猜你喜欢
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多