1

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

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

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

通过阅读此页面,我似乎需要创建一个自定义解析器......但我看到的所有示例都将所有作者都放在一个json文件中(所以你有两个集合,MarkdownRemark并且AuthorJson......虽然我认为我的所有帖子都是成员正在MarkdownRemark收集中。

非常感谢!

4

1 回答 1

1

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

这样做的一个问题是还有authorsunder members,这并不理想。更好的方法是定义新类型并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)
}
于 2021-02-01T08:49:39.690 回答