Msgstr "Тип RootQueryType должен определять одно или несколько полей." }

Попытка заставить 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
});

я получаю

{ "errors": [ { "message": "Тип RootQueryType должен определять одно или несколько полей." } ] }

введите описание изображения здесь

Почему это не работает?

2 ответа

Вы забыли использовать функцию стрелки

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

});

Я считаю, что ваша ошибка просто в вашем запросе. Вы используете 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

DevHints - GraphQL

Другие вопросы по тегам