尝试使用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必须定义一个或多个字段。" } ]}
为什么不起作用?
答案 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
}
}
请告诉我这是否适合您。
有关查询的一些文档:
答案 1 :(得分:1)
您忘记使用箭头功能
const UserType = new GraphQLObjectType({
name: 'User',
fields:()=>( {
id: {type: GraphQLString},
firstName: {type: GraphQLString},
age:{type: GraphQLInt}
});