Ошибка создания проекта CraftCMS Gatsby. Ошибка GraphQL. Ожидаемый тип [String], найдено {eq: $ slug}.

Я только начал работать с Gatsby, чтобы посмотреть, будет ли это хорошим выбором для перестройки веб-сайта CraftCMS моей компании с Craft в качестве бэкэнда и Gatsby в качестве интерфейса. Пока все работает хорошо, пока не пришло время запросить отдельные записи в нашем канале «кампании».

К слову, я смог отобразить полный список с помощью .map () для каждой записи моей кампании на странице «общего просмотра», чтобы увидеть все кампании. Мне также удалось рекурсивно создать каждую страницу кампании, чтобы она вызывала мой /src/templates/campaign-page.js шаблон и без проблем извлекала правильный слаг из Craft API моего сайта. По какой-то причине я просто не могу получить данные моей отдельной кампании для запроса в шаблоне campaign-page.js.

Я прочитал почти каждую страницу в документации Gatsby и все учебники, которые существуют в настоящее время, но, хоть убей, я не могу понять, почему мой запрос GraphQL не фильтрует отдельные записи моей кампании. Он просто продолжает говорить мне: «Ожидаемая ошибка GraphQL, тип [String], найден {eq: $ slug}».

Я также пробовал обернуть свой "slug: {eq: $ slug}" в "filter:" на основе некоторых документов по уценке, но это просто говорит мне, что "filter" не существует. Я начинаю думать, что проблема в мой файл gatsby-node.js, но я не вижу никаких проблем при сравнении его с документами.

Gatsby-node.js

const path = require(`path`)
exports.createPages = async ({ actions, graphql }) => {
  const { data } = await graphql(`
    query {
        api {
            entries(section: "campaigns") {
                slug
            }
        }
    }
  `)

  data.api.entries.forEach(({ slug }) => {
    actions.createPage({
      path: "/campaigns/" + slug,
      component: path.resolve(`./src/templates/campaign-page.js`),
      context: {
        slug: slug,
      },
    })
  })
}

Campaign-page.js

    export default ({data}) => {
        const post = data.api.entries
        return(
            <div className={"campaign-page-single"} style={{marginTop: '-21px,'}}>
            <Header/>
                <div>
                    <h1>{post.id}</h1>
                </div>
            </div>
        )
    }

    export const campaignQuery = graphql`
        query ($slug: String!){
            api{
                entries (slug: { eq: $slug }){
                    slug
                    id
                    ... on API_campaigns_campaigns_Entry {
                        id
                        campaignTitle
                        slug
                    }
                }
            }
        }
    `

Для справки, вот как выглядит типичный рабочий запрос на моей основной странице campaign.js, на которой перечислены все доступные кампании:

           query = {graphql`
                {
                    api {
                        entries(section: "campaigns") {
                            ... on API_campaigns_campaigns_Entry {
                                id
                                campaignTitle
                                uri
                                slug

                            }
                        }
                    }
                }
            `}

Я ожидаю, что мой шаблон /src/templates/campaign-page.js будет отображать данные отдельной кампании.


person SydneyH    schedule 17.10.2019    source источник


Ответы (1)


Наконец-то я попросил одного из моих коллег взглянуть на мой код. Все, что мне нужно было сделать, это заключить мою переменную $ slug в скобки следующим образом:

entries (section: "campaigns", slug: [$slug] )

Вот два дня, как я хотел бы вернуться.

person SydneyH    schedule 17.10.2019