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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:15:46