首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法查询allMarkdownRemark graphql上的字段

无法查询allMarkdownRemark graphql上的字段
EN

Stack Overflow用户
提问于 2021-01-04 15:56:40
回答 1查看 503关注 0票数 3

目标

嗨。我有一个Gatsby网站,我正在使用gatsby-transformer-remark插件将博客目录中的博客标记文件加载到GraphQL中,以便在我的网站上显示。我已经查看了文档和示例代码,以了解如何为每个页面创建一个插件,以便在gatsby-node.js文件中可以使用该插件动态创建页面。

问题

当我尝试访问GraphiQL中的fields { slug }属性时,我得到了以下错误:message": "Cannot query field \"fields\" on type \"MarkdownRemark\"."我已经检查了我的设置几次,我认为一切似乎都很好,所以我不能100%确定我错过了什么,因为没有这些字段。我可以访问其他信息,如markdown文件的原始内容和frontmatter数据,但不能访问字段。

代码

在我的gatsby-config.js插件中,我对源文件系统和remark插件进行了以下设置

代码语言:javascript
复制
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `blog`,
        path: `${__dirname}/blog`,
      },
    },
    {
      resolve: `gatsby-transformer-remark`,
      options: {
        plugins: [
          {
            resolve: `gatsby-remark-images`,
            options: {
              maxWidth: 960,
            },
          },
          `gatsby-remark-prismjs`,
          `gatsby-remark-copy-linked-files`,
        ],
      },
    },

在GraphiQL中,我运行以下查询来复制错误

代码语言:javascript
复制
query {
  allMarkdownRemark(
          sort: { fields: [frontmatter___date], order: DESC }
          limit: 1000
        ) {
    edges {
      node {
        fields {
          slug
        }
        frontmatter {
          title
        }
      }
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-04 16:06:53

正如您所看到的,slug字段不是frontmatter的子字段(如果您使用原始的markdown,则本机应该如此)。要使slug作为field的子级可用,需要在gatsby-node.js中添加以下代码片段

代码语言:javascript
复制
const { createFilePath } = require(`gatsby-source-filesystem`)

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

通过使用Gatsby API添加此配置,您将允许createNodeField和推断出的GraphQL模式在由其他插件创建的节点上创建额外的字段,方法是告诉Gatsby,如果节点类型为markdown,则基于slugfrontmatter值创建一个slug字段。

您可以在Gatsby's docs中查看更多信息。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65559337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档