用于嵌套对象的 Apollo Graphql 解析器
Apollo Graphql Resolver for a Nested Object
所以我有这样的类型:
type CardStatus {
status: String
lastUpdated: String
}
type CardCompany {
cardStatus: CardStatus
}
type ExternalAccounting {
cardCompany: CardCompany
}
type User {
balance: String
externalAccounting: ExternalAccounting
}
我的解析器看起来像这样
const User = {
balance: (root, args, context) => getBalance().then((res)=>res)
cardStatus: (??)
}
我想使用解析器在用户对象中设置嵌套的 cardStatus 字段。
Balance 是对象的直接字段,这很容易-我只是 运行 一个解析器和 return 结果来获得平衡。我想 运行 cardStatus api 调用深层嵌套的 cardStatus 字段,但我不知道如何执行此操作。我在我的解析器中试过这样的东西:
const User = {
balance: {...}
externalAccounting: {
cardCompany: {
cardStatus: (root) => { (...) },
},
},
}
但它不起作用,因为它没有设置用户对象的 cardStatus 嵌套字段。看起来应该比较容易,但是我在网上找不到例子..
您应该在 CardCompany
类型下定义 cardStatus
解析器。
定义类型时,它们应该在解析器映射中处于同一级别。 Apollo 将根据每个嵌套字段的类型负责解析查询的嵌套字段。
因此您的代码应如下所示:
const User = {
balance: (root, args, context) => getBalance().then((res)=>res)
}
const CardCompany = {
cardStatus: (root) => { (...) },
}
我不确定它是如何连接到您的可执行模式的,但它可能类似于:
const schema = makeExecutableSchema({
typeDefs,
resolvers: merge(User, CardCompany, /* ... more resolvers */ )
})
所以我有这样的类型:
type CardStatus {
status: String
lastUpdated: String
}
type CardCompany {
cardStatus: CardStatus
}
type ExternalAccounting {
cardCompany: CardCompany
}
type User {
balance: String
externalAccounting: ExternalAccounting
}
我的解析器看起来像这样
const User = {
balance: (root, args, context) => getBalance().then((res)=>res)
cardStatus: (??)
}
我想使用解析器在用户对象中设置嵌套的 cardStatus 字段。
Balance 是对象的直接字段,这很容易-我只是 运行 一个解析器和 return 结果来获得平衡。我想 运行 cardStatus api 调用深层嵌套的 cardStatus 字段,但我不知道如何执行此操作。我在我的解析器中试过这样的东西:
const User = {
balance: {...}
externalAccounting: {
cardCompany: {
cardStatus: (root) => { (...) },
},
},
}
但它不起作用,因为它没有设置用户对象的 cardStatus 嵌套字段。看起来应该比较容易,但是我在网上找不到例子..
您应该在 CardCompany
类型下定义 cardStatus
解析器。
定义类型时,它们应该在解析器映射中处于同一级别。 Apollo 将根据每个嵌套字段的类型负责解析查询的嵌套字段。
因此您的代码应如下所示:
const User = {
balance: (root, args, context) => getBalance().then((res)=>res)
}
const CardCompany = {
cardStatus: (root) => { (...) },
}
我不确定它是如何连接到您的可执行模式的,但它可能类似于:
const schema = makeExecutableSchema({
typeDefs,
resolvers: merge(User, CardCompany, /* ... more resolvers */ )
})