Gatsby 在 Markdown 文件之间的映射

问题描述

我正在创建一个多作者网站(使用 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 文件的前面有作者的名字。

我想设置架构,以便在查询帖子时,我还可以获取作者的详细信息(姓名、电子邮件等)。

从阅读 this page 来看,我似乎需要创建一个自定义解析器...但是我看到的所有示例都将所有作者都放在一个 json 文件中(因此您有两个集合,{{ 1}} 和 MarkdownRemark...虽然我认为我的所有帖子和成员都在 Authorjson 集合中。

非常感谢!

解决方法

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

这样做的一个问题是 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)
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...