AWS AppSync GraphQL订阅触发时返回值除ID外均为null问题
问题:GraphQL订阅onUpdate事件仅返回ID其余字段为null
我是GraphQL、Amplify、AppSync新手,订阅onUpdate事件时碰到问题。已经给Amplify项目加了API库,用API密钥认证,能通过Postman成功发送updatePurchaseOrder变更请求,订阅监听器也能检测到更新,但返回的数据除了更新记录的ID,其余字段全是null,包括status字段也没返回更新后的值。相关Schema定义没修改自动生成的变更和订阅,在浏览器控制台和AppSync控制台都出现同样问题,想问这是不是预期行为?
自定义类型定义
type PurchaseOrder @model @auth(rules: [ { allow: public } ] ){ id: ID! name: String! description: String! user: String time: String file: String! status: String }
自动生成的Schema变更与订阅
type PurchaseOrder { id: ID! name: String! description: String! user: String time: String file: String! status: String createdAt: AWSDateTime! updatedAt: AWSDateTime! } type Mutation { updatePurchaseOrder(input: UpdatePurchaseOrderInput!, condition: ModelPurchaseOrderConditionInput): PurchaseOrder } input UpdatePurchaseOrderInput { id: ID! name: String description: String user: String time: String file: String status: String } type Subscription { onUpdatePurchaseOrder: PurchaseOrder @aws_subscribe(mutations: ["updatePurchaseOrder"]) }
这不是预期行为,核心问题出在订阅请求的字段指定上:
AppSync订阅不会自动返回所有字段,必须明确声明你需要获取的字段。比如你的订阅查询应该写成:
subscription OnUpdatePurchaseOrder { onUpdatePurchaseOrder { id name description user time file status createdAt updatedAt } }
如果只写onUpdatePurchaseOrder { id },就只会返回ID,其他字段自然为null。不管是在AppSync控制台测试还是前端代码中,都要确保订阅请求包含所有需要的字段。
另外,既然Postman能成功执行变更,说明数据已经正确更新到DynamoDB,无需怀疑变更操作的有效性,重点检查订阅查询的字段列表即可。
内容的提问来源于stack exchange,提问作者r s
相关产品推荐
相关产品推荐

