当前位置:  开发笔记 > 程序员 > 正文

子解析器中的Graphql-Access参数

如何解决《子解析器中的Graphql-Access参数》经验,为你挑选了2个好方法。

我正在使用apollo-server和apollo-graphql-tools,我有以下架构

type TotalVehicleResponse {
  totalCars: Int
  totalTrucks: Int
}

type RootQuery {
  getTotalVehicals(color: String): TotalVehicleResponse
}

schema {
  query: RootQuery
}

和解析器功能是这样的

{
  RootQuery: {
    getTotalVehicals: async (root, args, context) => {
      // args = {color: 'something'}
      return {};
    },
    TotalVehicleResponse: {
      totalCars: async (root, args, conext) => {
        // args is empty({}) here
        .........
        .........
      },
      totalTrucks: async (root, args, conext) => {
        // args is empty({}) here
        .........
        .........
      }
    }
  }
}

我的问题是如何在任何子args解析器中访问root解析器(getTotalVehicals)中可用的?



1> imranolas..:

args请严格参考该字段查询中提供的参数。如果你想提供给孩子解析器值,你可以简单地从父解析器回报他们。

{
  RootQuery: {
    getTotalVehicles: async (root, args, context) => {
      return { color: args.color };
    },
    TotalVehicleResponse: {
      totalCars: async (root, args, context) => {
        // root contains color here
      },
      totalTrucks: async (root, args, context) => {
        // root contains color here
      }
    }
  }
}



2> Tal Z..:

如果你知道你正在使用变量,那么除了接受的答案之外,还有另一种方法,使用解析器函数的第四个参数:info.

info参数包含variableValues其他字段中的字段.此字段不严格包含父级args,但如果使用传递给父级解析程序的变量执行操作,则可以通过所有相关解析程序函数的info.variableValues访问它们.

因此,如果您的操作被调用,例如:

query GetTotalVehicalsOperation($color: String) {
  getTotalVehicals(color: $color) {
    totalCars
    totalTrucks   
  }
}

...带变量:{color:'something'}

您可以访问其他解析器中的变量:

{
  RootQuery: {
    getTotalVehicles: async (root, args, context, info) => {
      //info.variableValues contains {color: 'something'}          
      return {};
    },
    TotalVehicleResponse: {
      totalCars: async (root, args, context, info) => {
        //same here: info.variableValues contains {color: 'something'}
      },
      totalTrucks: async (root, args, context, info) => {
        //and also here: info.variableValues contains {color: 'something'}
      }
    }
  }
}


仅供参考,这仅在使用变量时有效.所以依靠信息可能不是一个好主意.
推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有