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
文件中(所以你有两个集合, MarkdownRemark
和 AuthorJson
...虽然我认为我的所有 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)
}
我正在创建一个多作者网站(使用 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
文件中(所以你有两个集合, MarkdownRemark
和 AuthorJson
...虽然我认为我的所有 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)
}