我正在使用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
)中可用的?
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 } } } }
如果你知道你正在使用变量,那么除了接受的答案之外,还有另一种方法,使用解析器函数的第四个参数: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'} } } } }