GraphQL 嵌套查询 returns 空
GraphQL nested query returns null
我正在尝试使用 GraphQL 嵌套查询(我 80% 确定这是嵌套查询?)来获取有关列表和列表的主厨(作者)的信息。我可以很好地获取房源信息,但是我无法获取厨师信息。
我的印象是,当 getListing(args)
返回时没有厨师的有效 User
对象时,默认解析器(用户)会触发。但是默认解析器似乎没有触发。
如何正确获取嵌套信息?
比如我的查询是:
query getListing($listingID: String!) {
getListing(listingID: $listingID) {
name
chef {
firstName
}
}
}
查询returns:
{
"data": {
"getListing": {
"name": "Test",
"chef": {
"firstName": null
}
}
}
}
函数getListing(args)
查询数据库和returns:
{
name: 'Test',
chef: 'testUsername',
listingID: 'testListingID'
}
我的架构是:
type Listing {
uuid: String!
name: String!
chef: User!
}
type User {
username: String
firstName: String
}
type Query {
getUser(jwt: String!): User
getListing(listingID: String): Listing
}
我的解析器是:
const resolvers = {
Query: {
getListing: async (parent, args, context, info) => {
console.log('GET_LISTING');
return getListing(args);
},
getUser: async (parent, args, context, info) => {
console.log('GET_USER');
return getUser(args);
},
},
User: async (parent, args) => {
console.log('USER RESOLVER');
return getUser(args);
},
};
其他信息:
我在与后端 DynamoDB 集成的 AWS Lambda 上使用 Apollo Server 运行。
解析器仅存在于字段级别。您无法解析类型(即用户)。您只能解析具有该类型的字段(即 chef
)。
const resolvers = {
// ...
Listing: {
chef: (parent, args) => {
return getUser()
},
},
}
不清楚 getUser
接受哪种参数,因此您需要相应地修改上面的示例。您不会使用 args
除非您实际为在您的模式中解析的字段指定参数。看起来返回的列表有一个 chef
属性,这是用户的名称,因此您可以使用 parent.chef
访问该值。
我正在尝试使用 GraphQL 嵌套查询(我 80% 确定这是嵌套查询?)来获取有关列表和列表的主厨(作者)的信息。我可以很好地获取房源信息,但是我无法获取厨师信息。
我的印象是,当 getListing(args)
返回时没有厨师的有效 User
对象时,默认解析器(用户)会触发。但是默认解析器似乎没有触发。
如何正确获取嵌套信息?
比如我的查询是:
query getListing($listingID: String!) {
getListing(listingID: $listingID) {
name
chef {
firstName
}
}
}
查询returns:
{
"data": {
"getListing": {
"name": "Test",
"chef": {
"firstName": null
}
}
}
}
函数getListing(args)
查询数据库和returns:
{
name: 'Test',
chef: 'testUsername',
listingID: 'testListingID'
}
我的架构是:
type Listing {
uuid: String!
name: String!
chef: User!
}
type User {
username: String
firstName: String
}
type Query {
getUser(jwt: String!): User
getListing(listingID: String): Listing
}
我的解析器是:
const resolvers = {
Query: {
getListing: async (parent, args, context, info) => {
console.log('GET_LISTING');
return getListing(args);
},
getUser: async (parent, args, context, info) => {
console.log('GET_USER');
return getUser(args);
},
},
User: async (parent, args) => {
console.log('USER RESOLVER');
return getUser(args);
},
};
其他信息: 我在与后端 DynamoDB 集成的 AWS Lambda 上使用 Apollo Server 运行。
解析器仅存在于字段级别。您无法解析类型(即用户)。您只能解析具有该类型的字段(即 chef
)。
const resolvers = {
// ...
Listing: {
chef: (parent, args) => {
return getUser()
},
},
}
不清楚 getUser
接受哪种参数,因此您需要相应地修改上面的示例。您不会使用 args
除非您实际为在您的模式中解析的字段指定参数。看起来返回的列表有一个 chef
属性,这是用户的名称,因此您可以使用 parent.chef
访问该值。