【问题标题】:Extending a GraphQL Filter Definition扩展 GraphQL 过滤器定义
【发布时间】:2020-03-03 10:34:15
【问题描述】:

我已扩展我的 graphql 架构以添加总计解析器,但我似乎无法扩展过滤器以过滤此字段。我不知道有什么问题,因为它看起来很简单,所以可能不支持?我正在使用带有 makeExtendSchemaPlugin 的 Postgraphile,但我相信问题是基本的 graphql 语法。

return {
  typeDefs: gql`
    extend type Note {
      lines: Int
    }
    extend type NoteFilter {
      lines: IntFilter
    }
  `,
  resolvers: {
    Note: {
      resolve: async(parent, args, ctx, info) => {
        // logic here
        return parent['@lines'].data.length;
      }
    }
  }
}

这看起来很简单。计数解析器有效,并告诉我笔记中有多少行,但我无法对其进行过滤。我不想将过滤器逻辑放在 lines 属性本身中。如果我定义一个新查询并给它一个 NoteFilter,过滤器存在但不包括我的扩展属性(行)。有人知道我在做什么错吗?这是我想要查询的最终目标:

gql`
  {
    allNotes(filter: {
      lines: {
        greaterThan: 10
      }
    }) {
      id
      lines
      line {
        content   
      }
    }
  }
`

【问题讨论】:

    标签: javascript node.js graphql graphql-js postgraphile


    【解决方案1】:

    如果您要扩展输入对象类型,正确的语法是:

    extend input NoteFilter {
      lines: IntFilter
    }
    

    在 SDL 中,输入对象类型表示为 input,而不是 type

    【讨论】:

    • 谢谢,这是我问题的答案。如果其他人找到它,值得注意的是,虽然这会将字段放入过滤器中,但实际上在字段上运行带有过滤器的查询会返回“无法解析过滤器字段”错误。这是有道理的,因为该字段是在我的解析方法中计算的,并且不能用作限制实际执行的查询结果的查询参数
    猜你喜欢
    • 2014-03-09
    • 2014-12-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 2019-12-29
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多