“类型 RootQueryType 必须定义一个或多个字段。”

Posted

技术标签:

【中文标题】“类型 RootQueryType 必须定义一个或多个字段。”【英文标题】:"Type RootQueryType must define one or more fields." 【发布时间】:2018-09-17 12:57:45 【问题描述】:

试图让 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": "Type RootQueryType 必须定义一个或多个字段。" ]

为什么它不起作用?

【问题讨论】:

【参考方案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

【讨论】:

【参考方案2】:

你忘了使用箭头函数

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

);

【讨论】:

以上是关于“类型 RootQueryType 必须定义一个或多个字段。”的主要内容,如果未能解决你的问题,请参考以下文章