javascript - DynamoDB 'createSet' 返回 'constructor' 而不是 'Set'

标签 javascript webpack amazon-dynamodb aws-sdk aws-sdk-js

问题:

正在尝试创建 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() 时,它需要此函数名称以便了解如何组装数据库更新参数。

不在 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
      }
  })
]

关于javascript - DynamoDB 'createSet' 返回 'constructor' 而不是 'Set',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47416726/

相关文章:

javascript - 动态创建鼠标光标?

amazon-dynamodb - 如何使用 AWS Dynamodb cli 查询以下划线开头的键?

amazon-web-services - AWS 上用于 SNS 通知的多区域架构

amazon-web-services - 如何在 AWS Api 网关映射模板中使用 IF 条件。我可以在不使用 foreach 的情况下使用 if 条件吗?

javascript - 获取对象内部数组的长度

JavaScript! !"false"

javascript - React 中使用 Dotenv 和 Webpack 的 env-vars

javascript - 使用 Webpack 模拟 <script> 标签

javascript - 通过另一个下拉菜单过滤下拉菜单

css - react CSS 的 webpack 配置