Сопоставление Гэтсби между файлами уценки

Я создаю сайт с несколькими авторами (используя 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)
}
Другие вопросы по тегам