使用Node.js更新DynamoDB表触发保留关键字hash错误如何解决
问题原因
hash属于DynamoDB的预设保留关键字,不允许直接在UpdateExpression中作为属性名使用,所以触发了ValidationException校验异常。
修复方案
使用DynamoDB提供的ExpressionAttributeNames参数给属于保留关键字的属性名定义别名,用别名在表达式中代替实际属性名即可。
修改后的参数配置如下:
var params = { TableName: table, Key:{ "email": email }, // 用别名#h代替实际属性名hash UpdateExpression: "set #h = :var", // 定义别名和实际属性名的映射关系 ExpressionAttributeNames:{ "#h": "hash" }, ExpressionAttributeValues:{ ":var": hash }, ReturnValues:"UPDATED_NEW" };
另外你代码中还有一处回调参数顺序的问题可以同步修复:docClient.update的回调函数标准顺序是(err, data),现有代码中操作成功的回调逻辑里写的是callback(data, null),和你定义的updateData入参callback(err, data)的顺序不一致,会导致调用方拿到的结果错位,建议修改为:
docClient.update(params, function(err, data) { if (err) { console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2)); callback(err, null); } else { // 调整参数顺序,第一个参数为错误位,第二个为返回数据 callback(null, data); } });
对应的updateData调用处也同步调整回调参数顺序:
updateData('joejava@icloud.com', 'hash', function(err, data){ console.log(err, data); })
内容的提问来源于stack exchange,提问作者Kaguei Nakueka
相关产品推荐
相关产品推荐

