Gatsby 的 markdown 文件之间的映射

Gatsby's mapping between markdown files

我正在创建一个多作者网站(使用 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]

我在作者的 markdown 文件的 frontmatter 中有作者的名字。

我想设置模式,这样当我查询 post 时,我也可以获得作者的详细信息(姓名、电子邮件等)。

从阅读 this page 看来我需要创建一个自定义解析器...但我看到的所有示例都将所有作者都放在一个 json 文件中(所以你有两个集合, MarkdownRemarkAuthorJson...虽然我认为我的所有 post 和成员都在 MarkdownRemark 集合中。

非常感谢!

我最终做了这样的事情。当然有一种更清洁的方法,但它对我有用。它遍历所有 Mdx 并向所有 Mdx 类型添加一个名为 authors 的字段,该字段被查询。

一个问题是 members 下还有 authors,这并不理想。更好的方法是定义新类型并将最后一个解析器中的 Mdx 更改为新的 post 数据类型。不知道如何让它工作。最后,我可以查询如下内容:

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)
}