DynamoDB 'createSet' returns 'constructor' 而不是 'Set'
DynamoDB 'createSet' returns 'constructor' instead of 'Set'
问题:
正在尝试创建 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' 的类型是 'constructor' 而不是 'Set'。尝试更新 DynamoDB 中的集合时出现以下错误。
Error: Invalid UpdateExpression: Incorrect operand type for operator or function; operator: ADD, operator type: MAP
问题:
我真的在寻找任何关于导致这种情况的线索。
我正在使用 webpack 部署我的应用程序。当 运行 开发中的 webpack 时,我能够获得正确的值,但是当我为生产构建它时,它表现出不正确的行为。
这不一定是 AWS 问题。可能是我对javascript 或 webpack 的理解不够
最终证明是我的webpack配置问题。我使用的模板包括 UglifyJS (v1.1.0) 以优化生产代码。原来UglifyJS的默认设置是'mangle'和'compress'。这两个选项都删除函数名称以优化代码大小。
在我的例子中,这是一个问题,因为 'createSet' 调用的 DynamoDBSet 构造函数的名称为 'Set'。当 docClient.update() 被调用时,它需要这个函数名称以便知道如何 assemble 数据库更新参数。
在 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
}
})
]
问题:
正在尝试创建 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' 的类型是 'constructor' 而不是 'Set'。尝试更新 DynamoDB 中的集合时出现以下错误。
Error: Invalid UpdateExpression: Incorrect operand type for operator or function; operator: ADD, operator type: MAP
问题:
我真的在寻找任何关于导致这种情况的线索。
我正在使用 webpack 部署我的应用程序。当 运行 开发中的 webpack 时,我能够获得正确的值,但是当我为生产构建它时,它表现出不正确的行为。
这不一定是 AWS 问题。可能是我对javascript 或 webpack 的理解不够
最终证明是我的webpack配置问题。我使用的模板包括 UglifyJS (v1.1.0) 以优化生产代码。原来UglifyJS的默认设置是'mangle'和'compress'。这两个选项都删除函数名称以优化代码大小。
在我的例子中,这是一个问题,因为 'createSet' 调用的 DynamoDBSet 构造函数的名称为 'Set'。当 docClient.update() 被调用时,它需要这个函数名称以便知道如何 assemble 数据库更新参数。
在 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
}
})
]