Сопоставление Гэтсби между файлами уценки
Я создаю сайт с несколькими авторами (используя
gatsby-plugin-mdx
) и имеют следующую файловую структуру:
/posts
- /post-1/index.mdx
- /post-2/index.mdx
- ...
/members
- /member-a/index.mdx
- /member-b/index.mdx
- ...
В авангарде
post
страница У меня есть множество авторов, таких как
authors: [Member A, Member B]
и у меня есть имя автора во вступительной части файла уценки автора.
Я хотел бы настроить схему так, чтобы при запросе сообщения я также получал сведения об авторах (имя, адрес электронной почты и т. д.).
Из чтения этой страницы кажется, что мне нужно создать собственный распознаватель... но все примеры, которые я вижу, имеют всех авторов в одном
json
файл (так что у вас есть две коллекции, и
AuthorJson
... пока я думаю для моего случая все мои посты и участники находятся в
MarkdownRemark
коллекция.
Спасибо большое!
1 ответ
Я заканчиваю тем, что делаю что-то вроде этого. Конечно, есть более чистый способ, но он работает для меня. Он проходит через все и добавляет запрашиваемое поле ко всем типам.
Одна проблема с этим заключается в том, что есть также
authors
под
members
, что не идеально. Лучшим подходом является определение новых типов и изменение
Mdx
в последнем распознавателе для вашего нового типа данных сообщения. Не уверен, как заставить это работать. В конце я мог бы запросить что-то вроде:
query MyQuery {
posts {
frontmatter {
title
subtitle
}
authors {
frontmatter {
name
email
}
}
}
}
exports.createResolvers = ({ createResolvers }) => {
const resolvers = {
Mdx: {
authors: {
type: ["Mdx"],
resolve(source, args, context, info) {
return context.nodeModel.runQuery({
query: {
filter: {
fields: {
collection: { eq: "members" }
},
frontmatter: {
memberid: { in: source.frontmatter.authors },
},
},
},
type: "Mdx",
firstOnly: false,
})
}
}
},
}
createResolvers(resolvers)
}