Ошибка 400 при разборе переменной в запрос GraphQL

У меня есть базовый компонент реакции, который должен отображать некоторые динамические данные из моей базы данных graphql через react-apollo. Я пытаюсь передать идентификатор содержимого в свой запрос следующим образом:

export default withApollo(graphql(
    gql`
            query ($postId: String!){
                blogPost (where: { id: $postId }){
                    title
                }
            }
    `,
    {
        options: {
            variables: {
                postId: "cjju54kgfl4r6095353zn6us1"

            },
            props: ({data}) => ({data})
        }
    })(Post))

Этот пример дает мне ошибку 400 на сервере

Однако это работает так:

export default withApollo(graphql(
    gql`
        query {
            blogPost (where: { id: "cjju54kgfl4r6095353zn6us1" }){
                title
            }
        }
    `,
    {
        options: {
            props: ({data}) => ({data})
        }
    })(Post))

Я просмотрел всю документацию Apollo и просто не могу понять, что я здесь делаю не так.

Вот весь компонент на случай, если это будет полезно:

import PageLayout from '../layouts/main'
import ContentWrapper from '../layouts/contentWrapper'
import Header from '../components/Header'
import {graphql} from 'react-apollo'
import gql from "graphql-tag";
import withApollo from "../lib/withApollo";
import ErrorMessage from '../components/ErrorMessage'

const headerContent = {
    headline: 'Test',
    subHeadline: 'Test'
}

function Post({data: {variables, loading, error, blogPost}}) {
    if (loading) {
        return <div>Loading</div>
    }
    else if (error) {
        return <ErrorMessage message='Error loading posts.'/>
    }
    else {
        return (
            <PageLayout>
                <Header data = {headerContent}/>
                <ContentWrapper>
                    <h1>{blogPost.title}</h1>
                    <p>{JSON.stringify(variables)}</p>
                </ContentWrapper>
            </PageLayout>
        )
    }
}

export default withApollo(graphql(
    gql`
            query ($postId: String!){
                blogPost (where: { id: $postId }){
                    title
                }
            }
    `,
    {
        options: {
            variables: {
                postId: "cjju54kgfl4r6095353zn6us1"

            },
            props: ({data}) => ({data})
        }
    })(Post))

Я действительно застрял в этом, спасибо за помощь!

Логирование data.error выкидывает:

Error: Network error: Response not successful: Received status code 400
    at new ApolloError (ApolloError.js:34)
    at ObservableQuery.webpackJsonp../node_modules/apollo-client/core/ObservableQuery.js.ObservableQuery.currentResult (ObservableQuery.js:87)
    at Query._this.getQueryResult (Query.js:104)
    at Query.webpackJsonp../node_modules/react-apollo/Query.js.Query.render (Query.js:206)
    at finishClassComponent (react-dom.development.js:13193)
    at updateClassComponent (react-dom.development.js:13155)
    at beginWork (react-dom.development.js:13824)
    at performUnitOfWork (react-dom.development.js:15863)
    at workLoop (react-dom.development.js:15902)
    at renderRoot (react-dom.development.js:15942)

Я удалил свой предыдущий ответ, так как он бесполезен. Но я склонен думать, что это проблема бэкэнда, обрабатывающего объект переменных, отправленный в запросе. Можете ли вы поделиться телом запроса POST, отправленным на сервер?

Pedro Baptista Afonso 25.07.2018 15:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
1
1
1 608
1

Ответы 1

Я только что разобрался:

$postId: String! должен быть $postId: ID

спасибо за помощь, кажется, я неправильно понял эту базовую концепцию GraphQL.

Другие вопросы по теме