"类型RootQueryType必须定义一个或多个字段。" }

时间:2018-04-07 18:40:04

标签: javascript express graphql graphql-js express-graphql

尝试使用GraphQL来使用JavaScript。不知道我的错误在哪里。

我的代码

const graphql = require('graphql');
const _ = require('lodash');
const {
  GraphQLObjectType,
  GraphQLString,
  GraphQLInt,
  GraphQLSchema
} = graphql;
const users = [
  { id: "23", firstName: "Bill", age: 20},
  { id: "47", firstName: "Sam", age: 21}
];
const UserType = new GraphQLObjectType({
  name: 'User',
  fields: {
    id: {type: GraphQLString},
    firstName: {type: GraphQLString},
    age:{type: GraphQLInt}
  }
});
const RootQuery = new GraphQLObjectType({
  name: 'RootQueryType',
  fields: {
    user: {
      type: UserType,
      args: { id: { type: GraphQLString } },
      resolve(parentValue, args) {
         return _.find(users, { id: args.id });
      }
    }
  }
});
module.exports = new GraphQLSchema ({
  query: RootQuery
});

我正在

  

{"错误":[       {         " message":"类型RootQueryType必须定义一个或多个字段。"       }     ]}

enter image description here

为什么不起作用?

2 个答案:

答案 0 :(得分:1)

我相信您的错误只是在您的查询中。您使用RootQueryType的fields对象来创建查询端点。您的案例中的fields对象只包含一个查询:user。但是,您尝试查询User,这是不同的。

const RootQuery = new GraphQLObjectType({
  name: 'RootQueryType',
  fields: {
    // The items listed here are going to be your root query endpoints.
    // Which in this case is only `user`.
    user: {
      type: UserType,
      args: { id: { type: GraphQLString } },
      resolve(parentValue, args) {
         return _.find(users, { id: args.id });
      }
    }
  }
});

因此,您需要使用user进行查询。

此外,您需要确保正确地进行查询。您尝试实现的基本查询语法如下所示:

{
  user(id: "23") {
    id
    firstName
    age
  }
}

请告诉我这是否适合您。

有关查询的一些文档:

GraphQL Queries

DevHints - GraphQL

答案 1 :(得分:1)

您忘记使用箭头功能

const UserType = new GraphQLObjectType({
  name: 'User',
  fields:()=>( {
    id: {type: GraphQLString},
    firstName: {type: GraphQLString},
    age:{type: GraphQLInt}

});