Ожидаемая переменная типа будет объектом, использующим Apollo - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть рабочий запрос в 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": { "имя": "ServerError", "ответ": {}, "StatusCode": 400, "результат": { "ошибки": [{ "сообщение":»Переменная \ "$ dialogId \" получила недопустимое значение \ "cjrtfagwc00bq0a300njz594r \"; Ожидаемый тип ConversationWhereUniqueInput для объекта. "," Location ": [{" line ": 1," column ": 23}]}]}},«message»: «Ошибка сети: Ответ не выполнен: получен код состояния 400»}

[Ошибка GraphQL]: Сообщение: переменная «$ dialogId» получила недопустимое значение «cjrtfagwc00bq0a300njz594r»;Ожидаемый тип ConversationWhereUniqueInput для объекта., Location: [object Object], Path: undefined

Я подумал, что, передав мою переменную как variables={{ conversationId }}, я фактически передавал объект по запросу.Что я делаю не так?

РЕДАКТИРОВАТЬ Бенджи помог мне найти, что было не так.

Мне просто нужно было изменить const conversationId: any = this.props.conversation на const conversationId: any = { this.props.conversation }

1 Ответ

0 голосов
/ 08 февраля 2019

Вы передаете переменные:

{
  "conversationId": "cjrtfagwc00bq0a300njz594r"
}

Это нормально.Проблема заключается в том, что ваш запрос определен, утверждая, что переменная conversationId (которой вы дали строку (или ID?) Значение "cjrtfagwc00bq0a300njz594r") должна быть ConversationWhereUniqueInput (которая является входным объектом):

$conversationId: ConversationWhereUniqueInput!

Эти два типа (ID и ConversationWhereUniqueInput) несовместимы.

Учитывая ваше именование переменных, я подозреваю, что вы хотите изменить свой запрос GraphQL, чтобы он проходил conversationId свойство как часть аргумента where:

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