GraphiQL在获取所有记录时返回空值

时间:2018-02-14 11:45:02

标签: json graphql graphql-js graphiql

我正在尝试构建一个简单的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获取所有内容,但没有传入args。如果我直接在浏览器中访问此URL,则会按预期返回所有用户。但是,如果我通过GraphiQL尝试它,它似乎返回一个对象,但所有字段都为null。 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 个答案:

答案 0 :(得分:2)

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

type: new GraphQLList(StaffType),