Мой сайт 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
}
}
}
во время createPages
узла gatsby-node, но ни один из путей еще не был создан - существовал только корневой и 404 пути (вероятно, потому что это единственные файлы в моих / страницахкаталог?)
Я предполагаю, что есть лучший способ сделать это в любом случае.Как я могу создать index.js в каждом подкаталоге?Спасибо.
РЕДАКТИРОВАТЬ: Я понял, createPage
- это асинхронная функция, мой запрос выполнялся до завершения createPage
s.Я изменил весь свой код с помощью async / await, чтобы убедиться, что страницы были созданы до выполнения запроса allSitePage
, но он все еще остается пустым.Сейчас действительно запутался.(Еще одно примечание: в браузере GraphiQL запрос, конечно, показывает все страницы. Похоже, они просто не доступны, пока не завершится gatsby-node.js
)
2-е РЕДАКТИРОВАНИЕ : Iменя попросили опубликовать мой код 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, который я первоначально разместил - и страниц там нет.