首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用阿波罗graphQL缝制模式?

如何使用阿波罗graphQL缝制模式?
EN

Stack Overflow用户
提问于 2020-05-20 19:38:00
回答 2查看 185关注 0票数 0

我是一个学习graphQL的java程序员。我有下面的示例数据集,其中注释包含postId,但post没有注释信息。

代码语言:javascript
复制
     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"
      }

使用阿波罗联邦

  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" } } ] }

代码语言:javascript
复制
1. I need to basically use following algorithm
代码语言:javascript
复制
    - get all comments 
    - Filter comments with given postId
    - collect all matching comments and return from resolver function

下面是post.js代码

键入Post @key(字段:"id"){ id: ID!用户标识: Int!标题:弦乐!注释:注释}扩展类型注释@key(字段:"id“){ id: ID!@external } const解析器={ Post:{Post(Post){ return ({ __typename:"Post",postId:post.id });查询:{ post:(root,{ id },{ dataSources }) => dataSources.mvrpAPI.getAPost(id),post:(root,args,{ dataSources }) => dataSources.mvrpAPI.getAllPosts()}

使用上面解析器的注释方法,我得到了以下错误

代码语言:javascript
复制
  "message": "Expected Iterable, but did not find one for field
 \"Post.comments\".",

然后,我尝试了下面的解析器方法,这不能识别mvrpAPI,即使它可以在解析器的查询部分工作。

代码语言:javascript
复制
     async comments(post, {dataSources}){
      const allComments =  dataSources.mvrpAPI.getAllComments();;

      return allComments.postId.findAll(
        { __typename: "Post",  postId:post.id }
      );
    }
    }

有人可以帮助如何写上面提到的逻辑(在第2点)的图形on。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-22 17:22:17

以下是我如何解决上述问题的方法

  1. response.filter重新运行了一个数组,由于我正在寻找一个具有特定post id的注释数组,所以只需将条件放入映射函数helped.
  2. dataSources.mvrpAPI.getAllComments()就可以了。为了获得真正的对象,我使用了“等待”,因为等待只能从异步函数中使用,所以我做了注释函数异步。

异步注释(post,{postid},{dataSources}){ const响应=等待dataSources.mvrpAPI.getAllComments();返回response.filter(注释=> comment.postId === post.id);},

票数 1
EN

Stack Overflow用户

发布于 2020-05-21 13:10:51

您将注释声明为Post架构上的列表,并在解析器上返回单个对象

返回({ __typename:"Post",postId:post.id });

这就是“预期的Iterable”错误的原因。

我不太熟悉那个数据库api,但是对于大多数api来说,这并不难。

在猫鼬里

代码语言:javascript
复制
async (post,_, {model}) => model.Comment.find({postId: post.id})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61921500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档