我在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