尝试创建DynamoDB集。
var docClient = new AWS.DynamoDB.DocumentClient();
var set = docClient.createSet(["Red", "Green", "Blue"]);
console.log(set);
更正'set'的日志值:
Set {values: Array(3), type: "String"}
type: "String"
values: ["Red", "Green", "Blue"]
__proto__: Object
我在控制台输出中获得的内容:
constructor {values: Array(3), type: "String"}
type: "String"
values: ["Red", "Green", "Blue"]
__proto__: Object
更新电话:
var params = {
TableName: "Table",
Key: {
"id": id
},
UpdateExpression: "ADD colors :c",
ExpressionAttributeValues: {
":c": docClient.createSet(["Red", "Green", "Blue"])
},
ReturnValues: "UPDATED_NEW"
}
docClient.update(params, callback);
因为'set'的类型是'构造函数'而不是'Set'。尝试更新DynamoDB中的集时,出现以下错误。
Error: Invalid UpdateExpression: Incorrect operand type for operator or function; operator: ADD, operator type: MAP
我真的在寻找任何会导致这种情况的暗示。
我正在使用webpack来部署我的应用。我在开发中运行webpack时能够获得正确的值,但是当我为生产构建时,它表现出不正确的行为。
这可能不一定是AWS问题。我可能缺乏对javascript或webpack的理解。
答案 0 :(得分:1)
最终,它确实成为了我的webpack配置问题。我使用的模板包括UglifyJS (v1.1.0)来优化生产代码。事实证明,UglifyJS的默认设置是' mangle'并且'压缩'这两个选项都删除了代码大小优化的函数名称。
在我的情况下,这是一个问题,因为DynamoDBSet的构造函数是' createSet'电话的名称为“Set'”。当调用docClient.update()时,它需要这个函数名,以便知道如何组装数据库更新参数。
解决方法是不在webpack.config.js中删除此函数名称:
plugins: [
new UglifyJSPlugin({
uglifyOptions: {
mangle: {
keep_fnames: true //Does not optimize function names
},
compress: {
keep_fnames: true //Same as mangle. Both are necessary
}
})
]