Gatsby无法从GraphQL查询创建多个子节?

时间:2019-11-19 01:09:20

标签: javascript reactjs graphql gatsby

我在Gatsby上使用Craft CMS无头模式,并且尝试从Craft输出的GraphQL数据生成两组页面。一节是我打算成为“ / notes / note-slug”的帖子,一节是打算成为“ / work / project-slug”的项目。

在将我的gatsby-node.js文件设置为尽可能接近我希望的工作状态之后,Gatsby开始启动,并在项目部分给我一个错误“无法读取未定义的属性'id'的ID”。

const path = require("path")

exports.createPages = ({ graphql, actions }) => {
  const { createPage } = actions

  const projectTemplate = path.resolve(`src/templates/project.js`)
  const blogPostTemplate = path.resolve(`src/templates/note.js`)

  return graphql(`
    {
      craft {
        projects: entries(section: "work") {
          id
          slug
        }
        blogPosts: entries(section: "notes") {
          id
          slug
        }
      }
    }
  `).then(result => {
    if (result.errors) {
      Promise.reject(result.errors)
    }

    // Create all single project pages
    result.data.craft.projects.forEach(({ project }) => {
      createPage({
        path: `/work/${project.slug}`,
        component: projectTemplate,
        context: {
          id: Number(project.id),
          slug: project.slug,
        },
      })
    })

    // Create all single note pages
    result.data.craft.blogPosts.forEach(({ note }) => {
      createPage({
        path: `/notes/${note.slug}`,
        component: blogPostTemplate,
        context: {
          id: Number(note.id),
          slug: note.slug,
        },
      })
    })

    return Promise.resolve()
  })
}

我的GraphQL查询很好,在对我的gatsby-node.js文件中的相同查询进行测试之后,就会返回

{
  "data": {
    "craft": {
      "projects": [
        {
          "id": "34",
          "slug": "some-slug"
        },
        {
          "id": "130",
          "slug": "have-a-slug"
        }
      ],
      "blogPosts": [
        {
          "id": "15",
          "slug": "another-slug"
        },
        {
          "id": "27",
          "slug": "one-slug"
        }
      ]
    }
  }
}

我正在努力查看我在哪里出错了,该节的段和id都可用,但是错误是指:

gatsby-node.js:31 result.data.craft.projects.forEach

很抱歉,如果这里没有足够的上下文,我会尝试根据需要提供更多内容。关于StackOverflow的第一个问题,所以只需学习绳索:D

0 个答案:

没有答案