通过NodeJS将对象保存到DynamoDB实例

时间:2016-10-29 19:44:51

标签: javascript node.js amazon-web-services amazon-dynamodb

我觉得我错过了一些明显的东西,但文档对于DynamoDB来说有点混乱,特别是对于NodeJS(我确实看到了很多Java,但是!)。

我已经做了很多搜索,只发现了有关旧SDK的问题,所以希望这不是一个重复的问题!

我正在尝试将Javascript对象存储到DynamoDB实例中。我得到的错误和我正在使用的代码概述如下。

错误:

Unable to add item. Error JSON: {
    "message": "One or more parameter values were invalid:
       Type mismatch for key File expected: S actual: M",
    "code": "ValidationException",
    "time": "2016-10-29T19:36:02.317Z",
    "requestId": [removed],
    "statusCode": 400,
    "retryable": false,
    "retryDelay": 0
}

代码:

var aws = require('aws-sdk');
var docClient = new aws.DynamoDB.DocumentClient({
    "accessKeyId": AWS_ACCESS_KEY_ID,
    "secretAccessKey": AWS_SECRET_ACCESS_KEY,
    region: 'us-east-1',
    endpoint: "https://dynamodb.us-east-1.amazonaws.com"
});
var tableName = AWS_TABLE_NAME;
var params = {
    TableName: tableName,
    Item: {
        ProjID: projID,
        File: {
            name: fileName,
            url: fileUrl
        }
    }
};
docClient.put(params, function (err, data) {
    if (err) {
        console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("Added item:", JSON.stringify(data, null, 2));
    }
    callback(true);
});

再次,我确定这是一个相当简单的问题 - 我还没有找到任何文档来帮助我更新。

预先感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:0)

文件是表格架构中的属性吗?如果是,并且它被定义为字符串,那么您得到的错误只是表明您正在尝试将地图放入字符串属性。

DynamoDB仅支持字符串和数字键,因此您必须重新访问您的设计。也许您可以将文件信息存储为密钥的字符串,然后在需要时将其作为映射扩展为单独的属性。