GraphiQL在获取所有记录时返回空值[重复]

Posted

技术标签:

【中文标题】GraphiQL在获取所有记录时返回空值[重复]【英文标题】:GraphiQL Returning null Values When Fetching All Records [duplicate] 【发布时间】:2018-07-24 23:33:21 【问题描述】:

我正在尝试构建一个简单的 GraphQL 架构。我有一个在 localhost 上运行的 json-server 端点,它返回一些简单的 json 数据。

我可以在提供 id 时返回用户。在架构中执行此操作的查询如下所示:

staff: 
    type: StaffType,
    args:  id:  type: GraphQLInt ,
    resolve(parentValue,  id ) 
        return axios.get(`http://localhost:3000/staff/$id`)
            .then(resp => resp.data);
    

GraphQL 查询如下所示:


    staff(id: 1)
        id
        Name
    

它会在 GraphiQL 客户端中返回:


  "data": 
    "staff": 
      "id": 1,
      "Name": "John Doe"
    
  

当我尝试返回所有用户时,我的问题就开始了。我创建了另一个查询来尝试从http://localhost:3000/staff 获取所有内容,而没有传入任何参数。如果我直接在浏览器中访问此 url,它会按预期返回所有用户。但是,如果我通过 GraphiQL 尝试它,它似乎返回一个对象,但所有字段都是空的。在 GraphiQL 或控制台上都没有给出错误。下面的代码示例:

架构中的查询

allStaff: 
    type: StaffType,
    resolve(parentValue, args) 
        return axios.get(`http://localhost:3000/staff/`)
            .then(resp => resp.data);
    

GraphiQL 查询


  allStaff 
    id
    Name
  

我得到的结果


  "data": 
    "allStaff": 
      "id": null,
      "Name": null,
    
  

如果我控制台日志 resp.data 有数据被返回,正如我所说,当我完全按照预期通过浏览器直接访问端点时,端点会返回数据。

我错过了什么吗?

谢谢

【问题讨论】:

【参考方案1】:

JSON 数据可能是一组用户对象,但 GraphQL 仍然只期待一个。这是因为在您的架构中,您已将 allStaff 的返回类型定义为 StaffType。您需要使用 List 包装器来包装它,如下所示:

type: new GraphQLList(StaffType),

【讨论】:

哦,当然!非常感谢。 谢谢!我太笨了,不明白为什么这么简单的查询不起作用。现在说得通了,干杯

以上是关于GraphiQL在获取所有记录时返回空值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

distinct mysql过滤重复记录

graphiql 突变请求成功但返回 null

尝试获取数据时GraphQL中的空值[重复]

Streamreader readline从流程执行返回空值[重复]

从mongoDB集合中获取N条最新记录时的回调函数[重复]

GraphQL 在突变时返回 null [重复]