0

嗨,我是 aws AppSync 和 GraphQl 的新手。我有订阅问题。我想在发布新帖子时实时收到通知

这是我的 graphql 架构 ``

type Mutation {
    addPost(
        id: ID!,
        author: String!,
        title: String,
        contennt: String,
        url: String
    ): Post!
    updatePost(
        id: ID!,
        author: String!,
        title: String,
        content: String,
        ups: Int!
    ): Post!
    deletePost(id: ID): Post!
}

type Post {
    id: ID!
    author: String!
    title: String!
    url: String
    content: String
    ups: Int!
}

type Query {
    allPost: [Post]
    getPost(id: ID!): Post
}

type Subscription {
    newPost: Post
        @aws_subscribe(mutations: ["addPost"])
}

schema {
    query: Query
    mutation: Mutation
    subscription: Subscription
}
``

这是我对潜艇的查询:

subscription NewPostSub{
  newPost{
    __typename
    title
    content
    author
    url
  }
}

我收到错误,提供的关键元素与模式不匹配,在 dynamodb 表中 pk 是 id 并且我生成了映射模板。谢谢

4

1 回答 1

1

谢谢(你的)信息。

首先,您根本不需要订阅字段上的解析器。您需要将解析器添加到订阅字段的唯一原因是在连接时根据调用身份进行授权检查。您无需添加解析器即可使订阅正常工作。Subscription.newPost要修复它,请从订阅 ( ) 字段中删除解析器。

要解决您的用例并使其仅订阅具有特定 ID 的帖子,请将您的newPost订阅字段更改为newPost(id: ID!). 当您进行订阅查询时,提供一个id并且该订阅将仅获得由具有该 ID 的订阅突变返回的推送帖子。这是 AppSync 中的一项功能,当您将参数添加到订阅字段时,参数相等检查会自动发生。

其次,当您将其粘贴到评论中时,您目前拥有以下请求映射模板Mutation.addPost

{ 
  "version" : "2017-02-28", 
  "operation" : "PutItem", 
  "key" : { 
    $util.dynamodb.toDynamoDBJson($ctx.args.id) 
    "id": $util.dynamodb.toDynamoDBJson($util.autoId()), 
  }, 
  "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) 
} 

有一个错字,应该是这样的:

{ 
  "version" : "2017-02-28", 
  "operation" : "PutItem", 
  "key" : { 
    "id": $util.dynamodb.toDynamoDBJson($util.autoId()), 
  }, 
  "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) 
} 
于 2018-09-04T07:57:13.840 回答