Почему я получаю ошибку, сохраняя дату, используя graphql> hasura> postgres - PullRequest
0 голосов
/ 24 апреля 2020

Я использую реагировать, apollo, graphql, hasura, postgres в качестве стека для взаимодействия с базой данных. Я думаю, что моя проблема немного мала, поэтому я сосредоточусь только на части, которая не работает, а не публикую весь код. Спасибо.

Error: GraphQL error: unexpected variables in variableValues: birthday
    at new ApolloError (bundle.esm.js:63)
    at Object.next (bundle.esm.js:1004)
    at notifySubscription (Observable.js:135)
    at onNotify (Observable.js:179)
    at SubscriptionObserver.next (Observable.js:235)
    at bundle.esm.js:866
    at Set.forEach (<anonymous>)
    at Object.next (bundle.esm.js:866)
    at notifySubscription (Observable.js:135)
    at onNotify (Observable.js:179)
    at SubscriptionObserver.next (Observable.js:235)
    at bundle.esm.js:76
variables{ id: 2324324, name: "Fred", birthday: "1991-01-11" }

Если я уберу день рождения, запрос сработает.

enter image description here

Вот функция

const onUpdateUser = (options) => {
    updateUser({
      variables: Object.assign({ id: userId }, options),
      optimisticResponse: {
        __typename: "mutation_root",
        update_users: {
          __typename: "users_mutation_response",
          affected_rows: 1,
          returning: [
            {
              __typename: "users",
              id: userId,
              ...options,
            },
          ],
        },
      },
    });
  };

вход {birthday: '1991-01-11'}

1 Ответ

0 голосов
/ 06 мая 2020

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

Вы не можете динамически добавлять несуществующие переменные в запрос в GraphQL. Ошибка говорит вам, что вы пытаетесь добавить переменную, которая не существует в вашем запросе

, т.е. это НЕ работает, потому что вы не определили день рождения.

mutation updateUser(
    $userId: Int!
    $birthday (UNDEFINED)
  ) {
    rest of query...
  }

Если вам нужно добавить динамическое c количество переменных, вы можете сделать что-то вроде этого.

React Code

const onUpdateUser = (options) => {
    updateUser({
      variables: {
        userId,
        userVariables: options
      },
      optimisticResponse: {
        __typename: "mutation_root",
        update_users: {
          __typename: "users_mutation_response",
          affected_rows: 1,
          returning: [
            {
              __typename: "users",
              id: userId,
              ...options,
            },
          ],
        },
      },
    });
  };

GraphQL мутация

mutation updateUser(
    $userId: Int!
    $userVariables: user_set_input!
  ) {
    update_user(
      where: { id: { _eq: $userId} }
      _set: $userVariables
    ) {
      affected_rows
    }
  }

https://hasura.io/docs/1.0/graphql/manual/mutations/update.html

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