问题描述
一段时间以来,我一直在与阿波罗实体及其参考资料搏斗。我遵循 this article 来实现文章(文章服务)与其作者(人员服务)之间的关系。相关代码如下:
// Article service type deFinitions
export const typeDefs = gql`
type Article @key(fields: "_id") @key(fields: "slug") {
_id: ID!
author: Person!
category: String
content: String
media: String
published: Boolean
slug: String!
subtitle: String
title: String!
}
...
`;
// Article service resolvers
...
Article: {
author: <IArticleAuthor> ((article) => {
return { __typename: 'Person',_id: article.author };
}),},...
// Person service resolvers
...
__resolveReference: (reference: { _id: string }) => {
return Person.findOne({ _id: { $eq: reference._id }});
},...
出现的问题是,当我实际发出请求时,我只获取在文章服务解析器页面 { __typename: 'Person',_id: article.author };
中返回的对象。我原以为一旦我提出获取文章的请求就会调用 __resolverReference
函数,但它没有。是否有什么我缺少的东西才能让它正常工作?
解决方法
它最终成为 Person 服务中的一个问题。我将 __resolveReference
方法附加到顶级解析器对象,而不是在 Person
属性中。
export const resolvers = {
__resolveReference: (reference) => Person.findOne({ _id: { $eq: reference.id } });
}
对比
export const resolvers = {
Person: {
__resolveReference: (reference) => Person.findOne({ _id: { $eq: reference.id } });
}
}