Мутация Graphql с типами массивов

Я пытаюсь написать запрос на мутацию, и он отлично работает с graphql

mutation($project: ProjectsInput) {
  NewProject(project: $project) {
    name,
    namespace,
    environments{
      env,      
    }}}

это переменные запроса

{"project": {
   "name": "Pr1",
  "namespace": "Pr2",
  "environments": 

  [{"env": "rec"},{"env": "dev"}]


}}

и вот как это выглядит graphql mutation теперь я пытаюсь использовать Apollo Client в angular вот так построить эту мутацию


    createProject() {
    this.apollo.mutate({
      mutation: gql`
      mutation($project: ProjectsInput) {
        NewProject(project: $project) {
          name,
          namespace,
          environments{
            env,      
          }
    `,
      variables: { 
        project: {
          name: "sth",
          namespace: "sth2",
          env: [
            {env:"env1"},
            {env:"env2"}
          ]
        } 
      }
    }).subscribe(data => {
      console.log('New project created!', data);

    });  }

Но я получаю ответ об ошибке Http из-за переменной $ env типа Array. Я хочу передать массив в качестве переменной для запроса в клиенте apollo. У меня нет проблем с переменными типа string, но объекты массива вызывают эта ошибка.


person maria    schedule 03.06.2020    source источник
comment
используйте документы graphiql для проверки сигнатуры мутации - возможно, ОДНА входная переменная - передайте все данные как один входной объект (соответствующий одной входной переменной), попробуйте использовать graphiql, используя query variables (ниже запрос) ... затем используйте код (apollo-client)   -  person xadm    schedule 03.06.2020
comment
спасибо за ваш ответ, на самом деле я пробовал с ДВУМЯ входными переменными, и все сработало нормально. Проблема в том, что я стек с типом списка массивов. я хочу динамически сохранять этот массив объектов. С уважением   -  person maria    schedule 04.06.2020


Ответы (1)


NewProject(project: показывает, что для вашей NewProject мутации нужен один project параметр

изменить запрос на

mutation($project: ProjectsInput) {
  NewProject(project: $project) {
    name,
    namespace,
    environments{
      env,      
    }

и передать один объект целиком в переменную project

используйте query variables в graphiql для определения тестовых переменных:

{ 
  project: {
    name: "sth",
    namespace: "sth2",
    environments: [
      {env:"env1"},
      {env:"env2"}
    ]
  } 
}

затем в клиенте подготовьте такой же объект для переменной project (конечно, со структурой, соответствующей вашему типу ввода мутации).

person xadm    schedule 04.06.2020
comment
Спасибо, сэр, но проблема не в этом. Запрос работает нормально. Проблема в том, что размер массива env не статичен (в проекте много сред, установленных администратором). строковые переменные не вызывают проблем. в этом случае, когда я удаляю переменную $ env из запроса apollo, она работает нормально, но когда я добавляю массив, я получаю сообщение об ошибке. - person maria; 04.06.2020
comment
покажите свою сигнатуру мутации - из graphiql ... и определений типов ввода, используемых в этой мутации - person xadm; 04.06.2020
comment
я отредактировал сообщение. я хочу добавить массив объектов в запрос клиента apollo. с уважением - person maria; 04.06.2020
comment
ничего не изменилось .... только мы знаем имя типа ввода;) ProjectsInput, по-прежнему подготовьте ОДИН объект, попробуйте сначала в graphiql (используя переменные запроса !!, а не структуры жесткого кодирования и передачу вложенных свойств), затем воссоздайте в коде - person xadm; 04.06.2020
comment
Я сделал то, что вы мне сказали, и я снова отредактировал пост. Теперь я использую переменные запроса, как на картинке (отредактировано в сообщении). проблема на самом деле не в бэкэнде Api, а в запросе клиента apollo. Надеюсь, я понимаю, что вы пытаетесь мне сказать. Благодарность - person maria; 04.06.2020
comment
просто попробуйте создать какой-нибудь объект project (со всеми необходимыми подсвойствами) из кода, прежде чем передавать его как проект в переменные ... к сожалению, это angular;) - person xadm; 04.06.2020
comment
я получаю эту ошибку Синтаксическая ошибка: ожидаемое имя, найдено ‹EOF› - person maria; 05.06.2020
comment
вы можете попытаться подготовить variables объект, console.log() его перед переходом к мутации ... вы также можете проверить тело сетевого запроса с помощью инструментов разработчика браузера - person xadm; 05.06.2020
comment
... потому что его зовут environments? .... "namespace":"sth2", >>>"environments" <<< :[{"env":"env1"} - person xadm; 05.06.2020