首页 > 解决方案 > 预期类型变量是使用 Apollo 的对象

问题描述

我在 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":[{"message": "变量 \"$conversationId\" 的值无效 \"cjrtfagwc00bq0a300njz594r\"; 预期类型 ConversationWhereUniqueInput 为对象。","locations":[{"line":1,"column":23}]}]}} ,"message":"网络错误:响应不成功:收到状态码 400"}

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

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

编辑 Benjie 帮我找到了问题所在。

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

标签: graphqlapollo

解决方案


您正在传递变量:

{
  "conversationId": "cjrtfagwc00bq0a300njz594r"
}

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

$conversationId: ConversationWhereUniqueInput!

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

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

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

推荐阅读