我正在使用 graphql 为使用 amplify 和 appsync 的反应本机应用程序建模用户对象。创建用户后,我需要更新名称字段,但我得到一个 DynamoDB:ConditionalCheckFailedException。创建用户和查询用户表工作正常,我只是无法更新现有对象的字段。
我在我的项目目录 (amplify/backend/api/schema.graphql) 中定义用户类型,并让 amplify CLI 根据我的模式类型生成 GraphQL 语句(查询、突变和订阅)。
我正在使用的架构:
type User @model @auth(rules: [{allow: owner}]) {
username: String!
name: String
}
type Mutation {
createUser(input: CreateUserInput!, condition: ModelUserConditionInput): User
updateUser(input: UpdateUserInput!, condition: ModelUserConditionInput): User
deleteUser(input: DeleteUserInput!, condition: ModelUserConditionInput): User
}
input UpdateUserInput {
username: String
name: String
}
我运行突变以使用登录用户的凭据创建用户。从 AppSync 控制台,我以 Cognito 用户的身份使用相同的用户名 (745ab477-5702-4f8d-b938-a987a3d9d192) 登录并运行此突变:
mutation updateUser{
updateUser(input: {
name: "James"
}
condition:{
username: {eq: "745ab477-5702-4f8d-b938-a987a3d9d192"}
}){
username
name
}
}
产生:
{
"data": {
"updateUser": null
},
"errors": [
{
"path": [
"updateUser"
],
"data": null,
"errorType": "DynamoDB:ConditionalCheckFailedException",
"errorInfo": null,
"locations": [
{
"line": 40,
"column": 5,
"sourceName": null
}
],
"message": "The conditional request failed (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ConditionalCheckFailedException; Request ID: HND4VSCK8HLM5NC08VDEV51CORVV4KQNSO5AEMVJF66Q9ASUAAJG)"
}
]
}
这是添加当前用户后的 DynamoDB 用户表: