为啥我使用 graphql > hasura > postgres 保存日期时出错

Posted

技术标签:

【中文标题】为啥我使用 graphql > hasura > postgres 保存日期时出错【英文标题】:Why I'm I getting an error saving date using graphql > hasura > postgres为什么我使用 graphql > hasura > postgres 保存日期时出错 【发布时间】:2020-08-07 10:46:57 【问题描述】:

我使用 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'

【问题讨论】:

请提供更多导致此错误的 javascript/Apollo 代码 - 这不是 Hasura 问题,因为根据 Postgres,“1991-01-11”是有效的日期格式(在 Heroku 实例中测试w/相同的架构)。 我添加了功能码。 谢谢,请提供updateUser对应的gql突变。似乎 Hasura 报告了该错误,进一步检查:github.com/hasura/graphql-engine/blob/master/server/src-lib/…,但这并不意味着它在上游是不可预防的。 【参考方案1】:

因此,如果不查看您的 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

【讨论】:

嘿,谢谢。我已经能够弄清楚并超越这个:)

以上是关于为啥我使用 graphql > hasura > postgres 保存日期时出错的主要内容,如果未能解决你的问题,请参考以下文章

无法使用我的突变在 Hasura / GraphQL 中插入数组关系

hasura graphql 模式拼接demo

hasura graphql server 集成gatsby

hasura graphql 集成pipelinedb测试

如何从 iOS 中的 hasura graphql 查询中获取错误响应

使用 Hasura graphql 模式时如何自定义 graphql-code-generator 生成的字段的类型