Ошибка создания проекта CraftCMS Gatsby «Ошибка GraphQL Ожидаемый тип [String], найдено {eq: $ slug}». - PullRequest
1 голос
/ 17 октября 2019

Я только начал работать с Гэтсби, чтобы посмотреть, будет ли хорошим вариантом перестроить веб-сайт 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
                    }
                }
            }
        }
    `

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

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

                            }
                        }
                    }
                }
            `}

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

1 Ответ

0 голосов
/ 17 октября 2019

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

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

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

...