web-dev-qa-db-ja.com

Graphql-子リゾルバーの引数にアクセスする

私は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)で使用できるgetTotalVehicalsにアクセスするにはどうすればよいですか?

9
Manan Vaghasiya

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
      }
    }
  }
}
10
imranolas

variablesを使用していることがわかっている場合は、受け入れられた回答以外に、リゾルバー関数の4番目の引数infoを使用する別の方法があります。

このinfo引数には、他のフィールドの中でも特にフィールドvariableValuesが含まれています。このフィールドには、親のargsが厳密に含まれているわけではありませんが、親リゾルバーに渡される変数を使用して操作を実行すると、関連するすべてのリゾルバーからinfo.variableValuesを介してそれらにアクセスできます。関数。

したがって、たとえば、操作が次のように呼び出された場合:

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

...変数付き:{色: '何か'}

他のリゾルバーから変数にアクセスできます。

{
  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'}
      }
    }
  }
}
7
Tal Z