使用以下代码,我成功更新了一个项目
const params = {
TableName: process.env.DYNAMODB_TABLE,
Key: {
id: event.pathParameters.id,
},
ExpressionAttributeNames: {
'#todo_text': 'text',
},
ExpressionAttributeValues: {
':text': data.text,
':checked': data.checked,
':updatedAt': timestamp,
},
UpdateExpression: 'SET #todo_text = :text, checked = :checked, updatedAt = :updatedAt',
ReturnValues: 'ALL_NEW',
};
然后我添加更多属性:
const params = {
TableName: process.env.DYNAMODB_TABLE,
Key: {
id: event.pathParameters.id,
},
ExpressionAttributeNames: {
'#user_name': 'name',
},
ExpressionAttributeValues: {
':name': data.name,
':email': data.email,
':username': data.username,
':password': data.password,
':checked': data.checked,
':updatedAt': timestamp,
},
UpdateExpression: 'SET #user_name = :name, email = :email, username = :username, password = :password, checked = :checked, updatedAt = :updatedAt',
ReturnValues: 'ALL_NEW',
};
如果我提供所有属性,则上述代码可以正常工作。
$ cat test/user-1.json
{
"name": "Bob",
"email": "bob@example.com",
"username": "bob",
"password": "adfdsfdsf",
"checked": false
}
但如果我只想更新部分内容,因为我每次都不需要更新电子邮件和密码,我收到错误Couldn't fetch the user item.
$ cat test/user-1.json
{
"name": "Bob",
"username": "bob-1",
"checked": false
}
$ curl -X PUT ${url}/${id} --data '@test/user-1.json'
Couldn't fetch the user item.
那么如何更改我不需要更新所有属性的代码。
答案 0 :(得分:0)
Update API调用无效,因为data.email和data.password未定义。
如果您不需要更新这些属性,我建议更改UpdateExpression。
答案 1 :(得分:0)
我知道这很老了,但是如果有人遇到这个问题,我基本上建立了一个params工厂-我有一个函数返回我的params和我的ExpressionAttributeValues
对象和UpdateExpression
字符串仅包含通过我的验证的变量