首页 > 解决方案 > 为什么我使用 graphql > hasura > postgres 保存日期时出错

问题描述

我使用 react、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" }

如果我删除生日,则查询有效。

在此处输入图像描述

这是功能

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'}

标签: postgresqlgraphqlhasura

解决方案


因此,如果不查看您的 graphql 查询,我想您可能会有点想不通。

您不能将不存在的变量动态添加到 graphql 查询。该错误告诉您您正在尝试添加查询中不存在的变量

即这不起作用,因为你还没有定义生日。

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

如果您需要添加动态数量的变量,您可以执行以下操作。

反应代码

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


推荐阅读