首页 > 解决方案 > Gatsby - 在每个子目录中创建 index.js

问题描述

我的 Gatsby 网站从 YAML 文件而不是 Markdown 中获取其内容。有一堆类别和子类别,有效路径如下:

mysite.com/movies/drama/war/1980s
mysite.com/video-games/puzzles
etc...

我想index.js为每个子目录创建一个:/movies、/movies/drama、/movies/drama/war、/video-games 等。

我的策略是获取所有页面的列表,我可以从中提取所有唯一路径和createPage每个页面中的 index.js。但是我尝试查询

  {
    allSitePage {
      nodes {
        path
      }
    }
  }

在 gatsby-node 期间,createPages但尚未创建任何路径 - 只有根路径和 404 路径存在(可能是因为这些是我的 /pages 目录中的唯一文件?)

我猜无论如何都有更好的方法来做到这一点。如何在每个子目录中创建 index.js?谢谢你。

编辑:我意识到createPage这是一个异步函数,我的查询在createPages 完成之前运行。我使用 async/await 调整了所有代码,以确保在运行查询之前创建了页面allSitePage——但它仍然是空的。现在真的很迷茫。(另一个注意事项:在 GraphiQL 浏览器中,查询当然会显示所有页面。它们似乎直到gatsby-node.js完成后才可用)

第二次编辑:我被要求发布我的 createPage() 代码:

  const postsYaml = resultYaml.data.allYaml.edges
  // 1-1 mapping between YAML edge and Gatsby page
  // use Promise.all() to ensure all pages are created before continuing
  await Promise.all(postsYaml.map(async (post, index) => {
    const previous = index === postsYaml.length - 1 ? null : postsYaml[index + 1].node
    const next = index === 0 ? null : postsYaml[index - 1].node

    createPage({
      path: post.node.fields.slug,
      component: blog-page,
      context: {
        slug: post.node.fields.slug,
        previous,
        next
      },
    })
  }))

所以这段代码运行,创建页面,然后我执行我最初发布的 GraphQL——页面不存在。

标签: reactjsgatsby

解决方案


推荐阅读