带有DynamoDB属性值的Nodejs中的Lambda可能不包含空string

DynamoDB无法将空string作为属性中的值,因此遇到了问题。 如果存在空string值,我总是必须检查前端,否则API调用将失败,因为Dynamo DB将抛出错误“一个AttributeValue可能不包含空string”。

如果有一个recursion函数会根据DynamoDB删除无效的属性,以便使DynamoDB中的putItem或更新请求能够正常工作,那么我正在游荡。

2017年1月3日最新更新合并#1283通过将标志convertEmptyValues放入客户端对象的选项字段中,更新了AWS.DynamoDB.DocumentClient 构造函数属性以允许使用空值。

例:

 const DynamoDB = new AWS.DynamoDB.DocumentClient( { convertEmptyValues: true } ); 

值得注意的问题

  • DynamoDB.DocumentClient应该支持空string属性#833
  • 尊重DynamoDB文档客户端#1281中的映射和列表的convertEmptyValues选项
  • 修复/ doc客户端空嵌套成员#1283
  • AWS论坛threadID#90137
  • 对于DynamoDb,空属性会导致ValidationException boto / boto3#1035

解决scheme是创build一个recursion函数,该函数根据DynamoDB检查对象中的每个属性,而不使用那些无效的属性值。

 function clean(obj) { return function remove(current) { _.each(current, function(value, key) { if (_.isUndefined(value) || _.isNull(value) || _.isNaN(value) || (_.isString(value) && _.isEmpty(value)) || (_.isObject(value) && _.isEmpty(remove(value)))) { delete current[key]; } }); if (_.isArray(current)) _.without(current, undefined); return current; }(_.clone(obj)); }