我正在使用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
.........
.........
}
}
}
}
我的问题是如何在任何子解析器中访问root解析器(args
)中可用的getTotalVehicals
?
答案 0 :(得分:5)
after
严格指代查询中提供的参数。如果您希望值对子解析器可用,您只需从父解析器返回它们。
args
答案 1 :(得分:5)
如果你知道你正在使用变量,除了接受的答案之外,还有另一种方法,使用解析器函数的第四个参数:info
。
此info
参数在其他字段中包含字段variableValues
。
此字段并不严格包含父{q} args
,但如果您的操作是使用传递给父解析器的变量执行的,那么您可以通过信息访问它们.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'}
}
}
}
}
答案 2 :(得分:2)
只需在字段类型中添加参数,它将在嵌套的解析器参数中可用,并且还请确保将变量添加到客户端查询中。
type RootQuery {
getTotalVehicles(color: String): TotalVehicleResponse
}
type TotalVehicleResponse {
totalCars(color: String): Int // <-- added arguments
totalTrucks(offset: Int, limit: Int): Int // <-- added arguments
}
schema {
query: RootQuery
}
然后,您可以在解析器参数字段中访问以下参数:
// In your child resolver
TotalVehicleResponse{
totalCars(parent, args, ctx){
const {color} = args // <-- access your client args here
return ....
}
totalTrucks(parent, args, ctx){
const {offset, limit} = args // <-- your args from client query
...do db query
return ....
}
}
在您的客户查询中
不要忘记在您的嵌套查询字段中添加变量。
getTotalVehicles(color: $color){
totalCars(color: $color) <-- add your variable here
totalTrucks(offset: $offset, limit: $limit) <-- add your variable here
}
答案 3 :(得分:-2)
要了解有关在GraphQL中使用变量的更多信息
请参考这些链接(您可以在不到5分钟的时间内浏览这些链接)
https://graphql.org/learn/queries/#operation-name
https://graphql.org/learn/queries/#variables
https://graphql.org/learn/queries/#fragments
https://graphql.org/learn/queries/#using-variables-inside-fragments
您将更多地掌握操作名称,变量,片段以及片段内部变量的使用。
它将帮助您进一步了解解析程序功能的 info 参数。