【问题标题】:Expected type variable to be an object using Apollo预期类型变量是使用 Apollo 的对象
【发布时间】:2019-07-02 13:40:05
【问题描述】:

我在 GraphQL Playground 中有一个工作查询,我正在尝试使用 Apollo 开始工作。我似乎无法将变量正确传递给查询。

这是我的代码:

public render() {
  const CONVERSATION = gql`
    query GetConversation(
      $conversationId: ConversationWhereUniqueInput!
    ) {
      conversation(where: $conversationId) {
        id
        title            
      }
    }
  `
  const conversationId: any = this.props.conversation
  console.log(conversationId) // works.

  return (
    <ApolloProvider client={this.client}>
      <div>
        <Query query={CONVERSATION} variables={{ conversationId }}>
          {({ loading, error, data }) => {
            if (error) {
              return <div>${JSON.stringify(error)}</div>
            }
            if (loading) {
              return <div>Loading...</div>
            }
            return <div>{JSON.stringify(data)}</div>
          }}
        </Query>
      </div>          
    </ApolloProvider>
  )
}

我得到的错误信息是:

${"graphQLErrors":[],"networkError":{"name":"ServerError","re​​sponse":{},"statusCode":400,"result":{"errors":[{"消息":"变量 \"$conversationId\" 获得无效值 \"cjrtfagwc00bq0a300njz594r\"; 预期类型 ConversationWhereUniqueInput 为对象。","locations":[{"line":1,"column":23}]} ]}},"message":"网络错误:响应不成功:收到状态码 400"}

[GraphQL 错误]:消息:变量“$conversationId”的值无效“cjrtfagwc00bq0a300njz594r”;预期类型 ConversationWhereUniqueInput 为对象。,位置:[object Object],路径:未定义

我认为通过将我的变量作为variables={{ conversationId }} 传递,我实际上是按照请求传递了一个对象。我做错了什么?

编辑 本杰帮我找出了问题所在。

我只需要将 const conversationId: any = this.props.conversation 更改为 const conversationId: any = { this.props.conversation }

【问题讨论】:

    标签: graphql apollo


    【解决方案1】:

    您正在传递变量:

    {
      "conversationId": "cjrtfagwc00bq0a300njz594r"
    }
    

    这很好。问题是您的查询被定义为声明conversationId 变量(您已给出字符串(或ID?)值"cjrtfagwc00bq0a300njz594r")应该是ConversationWhereUniqueInput(这是一个输入对象):

    $conversationId: ConversationWhereUniqueInput!
    

    这两种类型(IDConversationWhereUniqueInput)不兼容。

    鉴于您的变量命名,我怀疑您想更改 GraphQL 查询,以便将 conversationId 属性作为 where 参数的一部分传递:

    query GetConversation(
      $conversationId: ID!
    ) {
      conversation(where: {conversationId: $conversationId}) {
        id
        title            
      }
    }
    

    【讨论】:

    • 感谢@Benjie,您的回答帮助我找到了问题。我没有传递正确的变量,而是传递了一个字符串。我会用答案编辑我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2011-09-22
    相关资源
    最近更新 更多