Проблемы с вложенной мутацией в GraphQL - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь добиться гнездовой мутации, добавляя имя игрока в Team (Parent) и пытаясь получить список имен игроков ...

Внутри инструмента GraphiQL (localhost: 4000 / graphiql), этопеременная Add Mutation, которую я включил ...

mutation AddPlayerToTeam($name: String!, $teamId: ID!){
  addPlayerToTeam(player: $name, teamId: $teamId){
    id
    players{
      name
    }
  }
}

Переменные запроса, добавление teamID и имени ...

{
  "teamId": "5aff545371fc930a4c43b2b9",
  "name": "John Doe"
}

Результат показан ...

{
  "data": {
    "addPlayerToTeam": {
      "id": "5b072774e385740c38483111",
      "players": []
    }
  }
}

Но я ожидал, что имя игрока появится так ...

{
  "data": {
    "addPlayerToTeam": {
      "id": "5b072774e385740c38483111",
      "players": [
         { 
           "name": "John Doe"
         }
       ]
     }
  }
}

Код мутации ...

AddPlayerToTeam: {
    type: TeamType,
    args: {
            name: { type: new GraphQLNonNull(GraphQLString) },
            teamId: { type: new GraphQLNonNull(GraphQLID) }
        },
        resolve(parent, { name, teamId }) {
            let addPlayer = new Player({ name, teamId });
            return addPlayer.save();
        }
    },

Я боролся снайти причину, по которой я получаю "players": [] вместо "players": [ {"name": "John Doe" } ].Нужно ли включать .then(...) после .save(), чтобы получить результат?Есть примеры?Ваша помощь приветствуется.

Кстати, я использую метод mongoDB / mongoose.Сохранение их в местном mongoDB.

1 Ответ

0 голосов
/ 25 мая 2018

Нашел решение для этого ... Спасибо #andrewingram от graphql.slack за помощь.Просто включите .then(...), чтобы вернуть результат.

AddPlayerToTeam: {
    type: TeamType,
    args: {
        name: { type: new GraphQLNonNull(GraphQLString) },
        teamId: { type: new GraphQLNonNull(GraphQLID) }
    },
    async resolve(parent, { name, teamId }) {
        let addPlayer = new Player({ name, teamId });
        await addPlayer.save();
        return Team.findById(teamId);
    }
},

или в обещанной версии

resolve(parent, { name, teamId }) {
        let addPlayer = new Player({ name, teamId });
        return addPlayer.save().then(() => Team.findById(teamId));
    }

Надеюсь, что поможет.

...