预期类型变量是使用Apollo

时间:2019-02-08 10:21:25

标签: graphql 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”,“ response”:{},“ statusCode”:400,“ result”:{“ errors”:[{“ message“:”变量\“ $ conversationId \”的值无效\“ cjrtfagwc00bq0a300njz594r \”;预期的类型ConversationWhereUniqueInput是对象。“,”位置“:[{” line“:1,” column“:23}]} ]}},“消息”:“网络错误:响应失败:收到状态码400”}

     

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

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

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

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

1 个答案:

答案 0 :(得分:2)

您正在传递变量:

{
  "conversationId": "cjrtfagwc00bq0a300njz594r"
}

很好。问题是您的查询已定义为声明conversationId变量(您已将其赋予字符串(或ID?)值"cjrtfagwc00bq0a300njz594r")为ConversationWhereUniqueInput(是输入对象):

$conversationId: ConversationWhereUniqueInput!

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

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

query GetConversation(
  $conversationId: ID!
) {
  conversation(where: {conversationId: $conversationId}) {
    id
    title            
  }
}
相关问题