私は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
にアクセスするにはどうすればよいですか?
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
}
}
}
}
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'}
}
}
}
}