使用 Appsync 更新 GraphQL 中的突变
Posted
技术标签:
【中文标题】使用 Appsync 更新 GraphQL 中的突变【英文标题】:Update Mutations in GraphQL with Appsync 【发布时间】:2020-05-30 14:10:53 【问题描述】:我在使用 react-native 和 amplify 更新突变时遇到问题。
addProfileDetails = async (sub) =>
let UserDetails = await API.graphql(graphqlOperation(mutations.updatePeople, updatePeopleInput:
UserID: sub,
Organization: "Organization"
Name: "name"
));
console.log(UserDetails);
;
此代码不会产生任何错误,它与我最初用于创建记录的代码几乎相同。
但它会返回此数据并且实际上并未按预期更新记录。
Object
"data": Object
"updatePeople": null,
,
我在 appsync 查询编辑器上测试了这个查询:
mutation update
updatePeople (updatePeopleInput:
PersonID: "XXXXXXXXXXXXXXXXXXXXXXXXXX",
Gender: "Male"
)
PersonID
Gender
它返回相同的。创建突变工作,查询工作。我不明白这里发生了什么。
任何关于我做错了什么的见解都会有所帮助。另外,如果您需要架构或突变代码,我可以提供。
【问题讨论】:
【参考方案1】:我想通了。
原来 Appsync 创建的默认解析器无法更新我的 RDS 的突变。
我通过更改请求解析器解决了这个问题:
#set( $updateList = )
#foreach( $entry in $ctx.args.updatePeopleInput.keySet() )
#set( $discard = $updateList.put($entry, "'$ctx.args.updatePeopleInput[$entry]'") )
#end
#set( $update = $updateList.toString().replace("","").replace("","") )
"version": "2018-05-29",
"statements": [
$util.toJson("UPDATE People SET Gender='$ctx.args.updatePeopleInput.Gender', Username='$ctx.args.updatePeopleInput.Username' WHERE PersonID='$ctx.args.updatePeopleInput.PersonID'"),
$util.toJson("SELECT * FROM People WHERE PersonID='$ctx.args.updatePeopleInput.PersonID'")
]
之前是这样的:
#set( $updateList = )
#foreach( $entry in $ctx.args.updatePeopleInput.keySet() )
#set( $discard = $updateList.put($entry, "'$ctx.args.updatePeopleInput[$entry]'") )
#end
#set( $update = $updateList.toString().replace("","").replace("","") )
"version": "2018-05-29",
"statements": [
$util.toJson("UPDATE People SET $update WHERE PersonID='$ctx.args.updatePeopleInput.PersonID'"),
$util.toJson("SELECT * FROM People WHERE PersonID='$ctx.args.updatePeopleInput.PersonID'")
]
显然 $update 不起作用,您必须明确命名要设置的变量。
【讨论】:
那么,如果 db 中有多个列,而您只想更新一个列值怎么办。现在关闭更新单列值,我也传递所有其他列值。有没有什么方法可以更新给定的键值。以上是关于使用 Appsync 更新 GraphQL 中的突变的主要内容,如果未能解决你的问题,请参考以下文章
从 Lambda 调用 AWS AppSync graphql API
如何使用 AWS appsync (GraphQL) 禁用自省查询?
如何使用 amplify 将 GraphQL 更改从 Appsync 同步到 Android?
使用 AWS Appsync 和 GraphQL 查询 Dynamo DB 中的多个表
aws amplify appsync 中的 Graphql 突变错误
在 Ionic AWS Starter 模板中使用 Appsync 中的 Graphql 和 AWS Amplify 未捕获的异常 [Object Object]