带有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)); }