You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native+AWS AppSync中GraphQL非空字段Person返回null报错求助

解决AWS AppSync中GraphQL查询sendBy字段返回null的错误

嘿,作为GraphQL新手遇到这个问题很正常,咱们来一步步搞清楚它到底是怎么回事,以及怎么解决~

首先,先解读一下这个错误信息:

"Cannot return null for non-nullable type: 'Person' within parent 'Messages' (/getMessages/sendBy)"

这句话的核心意思是:你的Messages类型里,sendBy被定义为非空的Person类型(Person!),但查询这条Message的时候,AppSync找不到对应的Person数据,只能返回null,这就违反了Schema的非空约束,所以抛出了错误。

接下来,我们从几个常见的方向排查和解决:

1. 检查关联的Person数据是否存在

这是最常见的原因:你查询的这条Message,它关联的Person记录可能已经被删除,或者从一开始就没正确关联上。

  • 打开你的DynamoDB控制台(假设用的是DynamoDB作为数据源),找到存储Messages的表,查询id为a0546b5d-1faf-444c-b243-fab5e1f47d2d的那条记录。
  • 查看这条记录里的关联字段(通常是sendById或者类似的字段,由AppSync的@relation自动生成),拿到这个字段的值。
  • 再去Person表中查询是否存在id等于这个值的记录。如果不存在,那问题就出在这——要么是创建Message时关联了错误的Person id,要么是对应的Person被删除了。

2. 验证@relation关联配置是否正确

你的Schema里用了@relation(name: "UserMessages")来建立Person和Messages的关联,要确保这个配置是双向正确的:

  • 确认Person类型里的messages字段和Messages类型里的sendBy字段用的是同一个@relation名称(你这里都是UserMessages,这部分是对的)。
  • 如果是手动配置的Resolver,要检查sendBy字段的Resolver是否正确实现了关联查询。比如在Resolver的请求模板中,是否根据Message的关联字段去Person表中获取对应的记录,有没有写错表名或者字段名。

3. 测试单独查询Person记录

可以先单独写一个查询,验证对应的Person是否能正常获取:

query getPerson {
  getPerson(id: "这里填Message里的sendById值") {
    name
  }
}

如果这个查询返回null或者报错,那说明Person记录确实有问题,需要先修复Person的数据,或者重新关联正确的Person id到Message上。

4. 检查Message创建时的关联逻辑

如果这条Message是刚创建的,要检查创建时的Mutation是否正确关联了sendBy:

  • 比如创建Message的Mutation应该类似这样:
mutation createMessage {
  createMessage(input: {
    text: "测试消息",
    sendBy: {
      id: "正确的Person id"
    }
  }) {
    id
    text
    sendBy {
      name
    }
  }
}

如果创建时没有正确传入sendBy的id,或者传入了错误的id,就会导致后续查询时找不到对应的Person。

总结一下,这个错误的本质就是Schema要求sendBy必须是存在的Person,但实际数据中没有对应的Person记录,只要找到并修复这个数据关联的问题,就能解决报错啦~

内容的提问来源于stack exchange,提问作者user9526901

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:07:51