当前位置: 首页 > 知识库问答 >
问题:

如何编写GraphQL查询,以便使用GatsbyJS从mdx文件中获取图像?

阎雪峰
2023-03-14

我正试图用盖茨比创建一个博客。我遵循这个教程

https://www.gatsbyjs.org/docs/recipes/#optimizing-使用盖茨比图像查询后frontmatter中的图像

博客包含标题、特色图片和文本。

MDX文件结构如下所示。

---
title: My First Post
featuredImage: ./corgi.png
---
Post content...

并且,代码在文件gatsby节点中。像这样

exports.createPages = async ({ graphql, actions }) => {
  const { createPage } = actions
  // query for all markdown
  result.data.allMdx.edges.forEach(({ node }) => {
    createPage({
      path: node.fields.slug,
      component: path.resolve(`./src/components/markdown-layout.js`),
      context: {
        slug: node.fields.slug,
      },
    })
  })
}

在模板中,将使用此查询提取图像。

  query PostQuery($slug: String) {
    markdown: mdx(fields: { slug: { eq: $slug } }) {
      id
      frontmatter {
        image {
          childImageSharp {
            fluid {
              ...GatsbyImageSharpFluid
            }
          }
        }
      }
    }
  }

我的主要问题是在gatsby节点中编写GraphQL查询。js。我试了好几种。

const result = await graphql(`
    {
        {
            allMdx {
              edges {
                node {
                  id
                  frontmatter {
                    path
                    title
                  }
                }
              }
            }
          }                   
      `)

当我运行gatsbydevelop命令时,我看到下面的错误经过。

Field "featuredImage" must not have a selection since type "String" has no subfields

在包内配置的依赖项。json。

...
"dependencies": {
        "@emotion/core": "^10.0.17",
        "@emotion/styled": "^10.0.17",
        "@mdx-js/mdx": "^1.5.0",
        "@mdx-js/react": "^1.5.0",
        "axios": "^0.19.0",
        "babel-plugin-styled-components": "^1.10.6",
        "express": "^4.17.1",
        "gatsby": "^2.15.14",
        "gatsby-image": "^2.2.24",
        "gatsby-plugin-emotion": "^4.1.6",
        "gatsby-plugin-express": "^1.1.6",
        "gatsby-plugin-manifest": "^2.2.16",
        "gatsby-plugin-mdx": "^1.0.47",
        "gatsby-plugin-offline": "^2.2.10",
        "gatsby-plugin-react-helmet": "^3.1.7",
        "gatsby-plugin-sharp": "^2.2.28",
        "gatsby-plugin-styled-components": "^3.1.5",
        "gatsby-remark-images": "^3.1.25",
        "gatsby-source-filesystem": "^2.1.23",
        "gatsby-transformer-remark": "^2.6.22",
        "gatsby-transformer-sharp": "^2.2.20",
        "prop-types": "^15.7.2",
        "react": "^16.9.0",
        "react-dom": "^16.9.0",
        "react-helmet": "^5.2.1",
        "styled-components": "^4.3.2",
        "typeface-source-sans-pro": "0.0.75"
    },
...

有人知道如何解决这个问题吗?

先谢了乔迪

共有1个答案

金霄
2023-03-14

您应该更改此选项:

  query PostQuery($slug: String) {
    markdown: mdx(fields: { slug: { eq: $slug } }) {
      id
      frontmatter {
        image {
          childImageSharp {
            fluid {
              ...GatsbyImageSharpFluid
            }
          }
        }
      }
    }
  }

致:

query PostQuery($slug: String) {
    markdown: mdx(fields: { slug: { eq: $slug } }) {
      id
      frontmatter {
        featuredImage { // here is a mistake
          childImageSharp {
            fluid {
              ...GatsbyImageSharpFluid
            }
          }
        }
      }
    }
  }
 类似资料:
  • 我正在开发Spring-Spring数据Mongo示例。在本例中,我希望获取区域为空的文档。为此,我开发了存储库方法 数据库查询显示大写NULL而不是Null,现在db.customers.find({"区域":"null"});查询执行时我没有看到任何结果。我们如何编写存储库查询以获取NULL? 我开发的代码:CustomerRepository。Java语言 我的测试用例没有给出结果? Cus

  • 问题内容: 我有一个用于Elasticsearch的简单JSON查询,如下所示: 仅当值(在这种情况下为“ a1”)不为空时,才如何执行第二个“必须”条件? 问题答案: 您可以使用以下方法实现它-

  • 其中“in”是来自用户的输入。 我只从hibernate中的两个表中映射了Emp_Id作为主键,因此hibernate条件将只对该表应用联接,而不对Langcode应用联接。 注意:-我不能更改hibernate映射,只能使用hibernate标准,根据客户的要求,请帮助我。

  • 问题内容: 我有一个proyect用于加载查询: 在“ SELECT_BY_USER_ID”上是正常的字符串查询。 我在jar外部有一个YML配置,用于加载不同的配置,并且我也想使用此YML来加载查询。 示例YML: 但是我不知道如何直接从@Query值中的文件中加载,我试图这样做: 我能怎么做?谢谢。 问题答案: 如果您需要从资源文件夹中加载SQL,可以尝试使用spring-data- sqlf

  • 我有一个用于加载查询的项目: 在“SELECT_BY_USER_ID”上是一个普通的字符串查询。 我在jar之外有一个YML配置,我用来加载不同的配置,我也想使用这个YML来加载查询。 示例YML: 但是我不知道如何在@Query value中直接从我的文件加载,我尝试了一下: 我该怎么办?非常感谢。