问题描述
我正在创建一个多作者网站(使用 gatsby-plugin-mdx
)并具有以下文件结构:
/posts
- /post-1/index.mdx
- /post-2/index.mdx
- ...
/members
- /member-a/index.mdx
- /member-b/index.mdx
- ...
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)
}