“类型 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 必须定义一个或多个字段。”的主要内容,如果未能解决你的问题,请参考以下文章