代码之家  ›  专栏  ›  技术社区  ›  Funk Soul Ninja

订阅一个GraphQL项目

  •  4
  • Funk Soul Ninja  · 技术社区  · 7 年前

    使用GraphTool作为我的GraphQL后端,我想知道如何在给定ID的情况下只订阅一个项目。我一直在查看文档并尝试使用过滤器,但我仍然搞不清楚。如果我想订阅所有项目突变,我知道我必须这样做:

    subscription {
      Photo{
        node {
          id
          title
          url
        }
      }
    }
    

    1 回复  |  直到 7 年前
        1
  •  1
  •   marktani    7 年前

    filter capabilities known from the Simple API 也可以在订阅API中使用。您可以使用 node 中的属性 filter

    订阅创建的照片

    使用 mutation_in

    subscription {
      Photo(filter: {
        mutation_in: [CREATED]
      }) {
        node {
          id
          title
          url
        }
      }
    }
    

    订阅已创建的照片并更新某些照片字段

    在侦听更新时,我们可以进一步指定仅侦听特定字段的更新,使用 updatedFields_contains updatedFields_contains_every updatedFields_contains_some :

    subscription {
      # we can only use `updatedFields_x` filters together with `UPATED`
      # so we use OR
      Photo(filter: {
        OR: [{
          mutation_in: [UPDATED]
          updatedFields_contains: "title"
        }, {
          mutation_in: [CREATED]
        }]
    
      }) {
        previousValues {
          title # contains old title
        }
        node {
          id
          title # contains new title
          url
        }
      }
    }
    

    对于所有订阅查询,我们可以使用 allPhoto ,例如:

    subscription updatedPhoto($id: ID!) {
      Photo(filter: {
        mutation_in: [UPDATED]
        node: {
          id: $id
        }
      }) {
        previousValues {
          title # contains old title
        }
        node {
          id
          title # contains new title
          url
        }
      }
    }