AWS Amplify GraphQL AppSync列表查询过滤已删除条目及报错处理
错误原因
你遇到的报错是因为AppSync的GraphQL校验规则不支持给ModelFrameFilterInput这类复杂输入对象类型的变量直接在查询定义中设置默认值,你写的$filter: ModelFrameFilterInput = {_deleted: {ne: true}}不符合语法规范。
解决方案
可以根据你的使用场景二选一:
方案1:直接在查询中写死过滤规则
如果每次查询listFrames都需要过滤已删除条目,不需要动态修改过滤条件,可以直接把filter参数写死在查询语句中:
query MyQuery { listFrames(filter: {_deleted: {ne: true}}) { items { _deleted name id } } }
方案2:保留变量,调用时传入过滤参数
如果需要支持自定义其他过滤条件,保留变量定义,去掉默认值,在调用查询的时候传入filter参数即可:
- 查询语句:
query MyQuery($filter: ModelFrameFilterInput) { listFrames(filter: $filter) { items { _deleted name id } } }
- 调用时传入的变量示例:
{ "filter": { "_deleted": { "ne": true } } }
如果是在Amplify JS客户端中调用,示例代码如下:
import { API } from 'aws-amplify' import { MyQuery } from './graphql/queries' // 调用查询 const result = await API.graphql({ query: MyQuery, variables: { filter: { _deleted: { ne: true } } } }) const frameList = result.data.listFrames.items
注意事项
- 上述方案生效的前提是你的AppSync API开启了冲突检测与数据版本控制,才会存在系统自带的
_deleted字段 - 如果你开启了Amplify DataStore,也可以直接在DataStore的查询方法中添加同样的过滤条件,效果一致
内容的提问来源于stack exchange,提问作者BitFunny
相关产品推荐
相关产品推荐

