Как передать объект в мутацию в машинописи 3.0 - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть объект input, и я хочу передать его mutation:

export enum RatingType {
  GENERAL = 'GENERAL',
  ADULT = 'ADULT',
}
const input = {
  id: '123456789',
  name: 'yourname',
  ratingType: RatingType.ADULT
}

Как передать input в mutation следующим образом:

mutation = `mutation updateUser{
  user: {
     id: "1234567890",
     name: "yourname",
     ratingType: ADULT,
  }
}` 

я попробовал, как показано ниже

import {request} from 'graphql-request';
const mutation = `mutation updateUser{
  user: {
     ${JSON.stringify(input)}
  }
}`
const response = await request('http://localhost:3002/graphql', mutation);

, но mutation не распознает:

"id" должно быть id

"name" должно быть name

"ratingType" должно быть ratingType

'123456789' должно быть "123456789"

'yourname' должно быть "yourname"

'ADULT' должно быть ADULT

Пожалуйста, дайте мне совет

Спасибо.

1 Ответ

0 голосов
/ 13 декабря 2018

Прежде всего, GraphQL - это не JSON.Поэтому нет смысла использовать здесь JSON.stringify.В GraphQL вы можете использовать переменные в качестве аргументов для решения вашей проблемы.Затем вы можете предоставить свои переменные в формате JSON.

Не зная, какую библиотеку вы используете, я предполагаю, что вы общаетесь со своим сервером graphql без какой-либо библиотеки graphql.Я предполагаю, что вы используете что-то похожее на fetch.

Я предполагаю, что у вас есть что-то вроде UpdateUserInput в качестве типа graphql для вашего входного аргумента.Поэтому, чтобы использовать переменные, вам нужно переписать вашу мутацию следующим образом:

mutation UpdateUser($input: UpdateUserInput) {
  updateUser(user: $user) {
    id
    name
  }
}

Затем вы можете предоставить свои переменные следующим образом:

input: JSON.stringify(input)

Таким образом, полный вызов fetch будет выглядетьчто-то вроде этого

const data = {
  query: `
    mutation ($input: UpdateUserInput) {
      updateUser(user: $user) {
        id
        name
      }
    }
  `,
  variables: {
    user: input
  }
};
fetch(url, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify(data),
});

Но сложно сказать, как это правильно реализовать, не зная клиентскую библиотеку GraphQL.Может быть, вы захотите взглянуть на ApolloClient.

Также имейте в виду, что я не тестировал этот код, поэтому могут быть небольшие ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...