Переменная «$productSlug» никогда не используется в операции «SingleProduct». Ошибка Graphql. Переменные не работают в моих запросах Gatsby graphql

#graphql #gatsby

#graphql #gatsby

Вопрос:

Я получаю эту ошибку: переменная «$ productSlug» никогда не используется в операции «SingleProduct».

Я также использую gatsby-source-wordpress для запроса полей из wordpress в gatsby. Я также удалил Gatsby и переустановил его, чтобы посмотреть, работает ли он в разных версиях, но это не так.

Я искал ответ по всему Интернету и переполнению стека, я действительно считаю, что это должна быть ошибка с Gatsby или gatsby-source-wordpress,

это код:

 const path = require("path");
const { createFilePath } = require(`gatsby-source-filesystem`);

exports.onCreatePage = ({ page, actions }) => {
  const { createPage } = actions;

  if (page.path.match(/products/)) {
    page.context.layout = "ArchiveProduct";
    createPage(page);
  }

  if (page.path.match(/products/([^/] $)/)) {
    page.context.layout = "SingleProduct";
    createPage(page);
  }
};

exports.onCreateNode = ({ node, getNode, actions }) => {
  const { createNodeField } = actions;
  if (node.internal.type === `allWpProduct`) {
    const slug = createFilePath({ node, getNode, basePath: `pages` });
    createNodeField({
      node,
      name: `slug`,
      value: slug,
    });
  }
};

exports.createPages = async function ({ graphql, actions }) {
  const { data } = await graphql(`
    query SingleProduct {
      allWpProduct {
        nodes {
          uri
          slug
          id
        }
      }
    }
  `);

  data.allWpProduct.nodes.forEach((node) => {
    // const slug = node.slug;
    actions.createPage({
      path: "/products/"   node.slug,
      component: path.resolve("./src/templates/SingleProduct.js"),
      context: {
        productSlug: node.slug,
        productId: node.id,
        layout: "SingleProduct",
      },
    });
  });
}; 

И это запрос:

 export const query = graphql`
  query SingleProduct($productSlug: String!) {
    wpProduct(slug: { eq: "$productSlug" }) {
      title
      slug
      link
      id
      date(formatString: "MMMM DD, YYYY")
      product {
        description
        price
        slug
        photo {
          localFile {
            childImageSharp {
              gatsbyImageData
            }
          }
        }
      }
    }
  }
`; 

Ответ №1:

Попробуйте следующее:

 export const query = graphql`
  query SingleProduct($productSlug: String!) {
    wpProduct(filter: {slug: { eq: "$productSlug" }}) {
      title
      slug
      link
      id
      date(formatString: "MMMM DD, YYYY")
      product {
        description
        price
        slug
        photo {
          localFile {
            childImageSharp {
              gatsbyImageData
            }
          }
        }
      }
    }
  }
`;
 

Ваша проблема возникает из $productSlug -за того, что она правильно устраняется через контекст, но никогда не используется в каком-либо действии фильтрации внутри запроса.

Я бы рекомендовал вам проверить это раньше на игровой площадке GraphiQL, жестко $productSlug запрограммировав для проверки выходных данных.

Комментарии:

1. он все еще не работает, он выдает мне ту же ошибку: переменная «$productSlug» никогда не используется в операции «SingleProduct» graphql / template-strings

2. Вы пробовали это на игровой площадке graphiql, как я предложил ( localhost:8000/___graphql )? Проверьте фильтры и доступные там узлы

3. Да, я пробовал оба /_graphql и /___graphql, может быть, это версия Гэтсби? Поскольку это работает на другом сайте, я использовал эту переменную, созданную с помощью Gatsby…