我是一名学习graphQL的java程序员。我有如下示例的数据集,其中评论有 postId,但帖子没有评论信息。
comments
{
"postId": 1,
"id": 1,
"name": "id labore ex et quam laborum",
"email": "Eliseo@gardner.biz",
"body": "laudantium enim quasi"
}
post
{
"userid": 3,
"id": 1,
"title": "Post 1"
}
使用阿波罗联盟
我可以在帖子回复中提供评论详细信息吗?
{ "data": { "posts": [ { "userid": 3, "id": 1, "title": "Post 1" "comments": { "id": 1, "name": "id labore ex et quam laborum", "email": "Eliseo@gardner.biz", "body": "laudantium enim quasi" } } ] }
我需要基本上使用以下算法
- 获取所有评论
- 使用给定的 postId 过滤评论
- 收集所有匹配的评论并从解析器函数返回
下面是 post.js 代码
type Post @key(fields: "id"){ id: ID! userid: Int! title: String! comments: [Comment] } extend type Comment @key(fields: "id" ){ id: ID! @external } const resolvers = { Post: { comments(post){ return ( { __typename: "Post", postId:post.id }); } Query: { post: (root, { id }, { dataSources }) => dataSources.mvrpAPI.getAPost(id), posts: (root, args, { dataSources }) => dataSources.mvrpAPI.getAllPosts()}
使用上述解析器的评论方法,我得到以下错误
"message": "Expected Iterable, but did not find one for field
\"Post.comments\".",
然后我尝试了下面的解析器方法,这无法识别 mvrpAPI,即使它适用于解析器的查询部分
async comments(post, {dataSources}){
const allComments = dataSources.mvrpAPI.getAllComments();;
return allComments.postId.findAll(
{ __typename: "Post", postId:post.id }
);
}
}
有人可以帮助如何在 graphql 中编写上述逻辑(在第 2 点中)。