【发布时间】:2021-01-13 16:15:33
【问题描述】:
我使用 MongoDB 作为我的联合 Apollo GraphQL API 的数据库。
(我的代码在 TypeScript 中)
我为Post 解析器对象创建了一个__resolveReference 方法,当我从user service 调用它时,它工作正常,如下所示:
User: {
...
firstPost(user: any) {
return { __typename: "Post", _id: user.firstPost };
},
}
...
}
但是,当我在数组上调用它时,它不起作用。以下是我的称呼:
User: {
...
posts(user: any) {
user.posts.map((x: any) => {
return { __typename: "Post", _id: x };
});
},
...
}
帖子__resolveReference代码如下:
Post: {
...
async __resolveReference(reference: any, { db }: any) {
console.log(reference);
console.log(reference._id);
try {
let r = (await db
.collection("posts")
.findOne({ _id: new ObjectID(reference._id) })) as Post;
console.log(r.content);
return r;
} catch (err) {
console.log(err.stack);
}
},
...
我知道从posts 解析器对User 对象调用时__resolveReference 没有被“命中”,因为console.log()s 没有显示在终端中,同样,仅来自@987654333 @resolver 而不是firstPost。
我需要一些帮助来让 __resolveReference 为数组工作。
谢谢。
【问题讨论】:
-
firstPost 和 posts 解析器应该在 Post 服务而不是 User 服务中实现。您应该在 Post 类型上扩展 User 类型以构建引用,如下所示:apollographql.com/docs/federation/#federated-schema-example
标签: typescript graphql apollo apollo-federation