【问题标题】:How to find path to a field in a graphql query如何在graphql查询中找到字段的路径
【发布时间】:2021-10-10 02:47:19
【问题描述】:

我对 graphql 很陌生。我有以下 graphql 查询作为示例:

query pets {
  breed(some arguments) 
  {
    name
    items 
    {
      owner(some arguments) 
      {
        items 
        {
          ID
          ownerSnumber
          country
          address
          school
          nationality
          gender
          activity
        }
      }
      name
      phoneNumber
      sin
    }
  }
}

是否可以解析 gql 查询并获取查询中字段的路径? 例如,我想获取 'ID' 的路径。比如从上面的查询中,是否可以得到ID所在的路径:owner.items.ID

【问题讨论】:

    标签: graphql apollo apollo-server gql gqlquery


    【解决方案1】:

    从较早的答案开始,您可以依靠 ResolveInfo 执行诸如从子级到父级的递归检查之类的操作:

    export const getFieldPath = (path: Path): string => {
      if (!path.prev) return `${path.key}`
    
      return `${getFieldPath(path.prev)}.${path.key}`
    }
    

    稍后在您的解析器中,您可以像这样使用它:

    const myFieldResolver = (parent, args, ctx, info) => {
      const pathOfThisResolversField = getFieldPath(info.path)
    
      // use your pathOfThisResolversField 
    
      return yourFieldResolvedData
    };
    

    值得注意的是,上面的解决方案将包括每个节点一直到查询根,而不仅仅是你提到的那些owner.items.ID

    【讨论】:

      【解决方案2】:

      对于https://graphql.org/graphql-js/,它公开了第四个参数,称为resolve info。此字段包含有关该字段的更多信息。

      看看GraphQLObjectTypeconfig参数类型定义:

      【讨论】:

        猜你喜欢
        • 2019-07-28
        • 2018-02-07
        • 2018-04-13
        • 2019-06-29
        • 2020-05-22
        • 2018-08-04
        • 1970-01-01
        • 2021-12-14
        • 1970-01-01
        相关资源
        最近更新 更多