Получение массива в GraphQL и Apollo - PullRequest
0 голосов
/ 25 августа 2018

Итак, я настроил API, используя Graphql и Apollo, и мне удалось получить массив строк в mongoDB ... Теперь я запрашиваю данные для реагирования с помощью Apollo и не могу найти, как получить его, как я получаюa

error:[GraphQL error]: Message: String cannot represent an array value: [pushups,situps], Location: [object Object], Path: wods,0,movements 

Моя схема настроена как:

   const WodType = new GraphQLObjectType({
  name: 'Wod',
  fields: () => ({
    id: { type: GraphQLID },
    name: { type: GraphQLString },
    movements: { type: GraphQLString },
    difficulty: { type: GraphQLString },
    group: {
  type: GroupType,
  resolve(parent, args) {
    return Group.findById(parent.groupId);
  }
}

})});

и моя мутация:

const Mutation = new GraphQLObjectType({
  name: 'Mutation',
  fields: {
    addWod: {
      type: WodType,
  args: {
    name: { type: new GraphQLNonNull(GraphQLString) },
    movements: { type: new GraphQLList(GraphQLString) },
    difficulty: { type: new GraphQLNonNull(GraphQLString) },
    groupId: { type: new GraphQLNonNull(GraphQLID) }
  },
  resolve(parent, args) {
    let wod = new Wod({
      // Use model to create new Wod
      name: args.name,
      movements: args.movements,
      difficulty: args.difficulty,
      groupId: args.groupId
    });
    // Save to database
    return wod.save();
  }

Массив представляет собой массив строк в разделе "движения" ... любая помощь с запросами, чтобы получить это в React, очень ценится ... вот текущий запрос на переднем конце ... с использованием Apollo Boost

const getWodsQuery = gql`
  {
    wods {
      id
     name
      movements
      difficulty
    }
   }
 `;

1 Ответ

0 голосов
/ 27 августа 2018

не уверен, что он все еще актуален, я не воссоздал код, но проблема, вероятно, будет в том, что вы возвращаете «движения» как просто «строку», а не массив строк в выходном объекте типа Wod.Это только предположение, основанное на аргументах, которые вы передаете мутации (это список строк).Исправление должно состоять в том, чтобы просто изменить тип дерева следующим образом

const WodType = new GraphQLObjectType({
  name: 'Wod',
  fields: () => ({
    id: { type: GraphQLID },
    name: { type: GraphQLString },
    movements: { type: new GraphQLList(GraphQLString) },
    difficulty: { type: GraphQLString },
    group: {
  type: GroupType,
  resolve(parent, args) {
    return Group.findById(parent.groupId);
  }
})

Обратите внимание, что это только мое предположение, так как я не знаю, как хранятся ваши данные, но, вероятно, это правильно, основываясь насообщение об ошибке.Я написал статью о реализации списков / массивов в схеме GraphQL, поскольку увидел, что многие люди сталкиваются с подобными проблемами.Вы можете проверить это здесь https://graphqlmastery.com/blog/graphql-list-how-to-use-arrays-in-graphql-schema

...