在我的博客中,我有来自两个来源的博客文章数据,旧的json文件(-> PostJson
GraphQL节点)和新的.md文件(-> MarkdownRemark
节点)。它们都有相同的数据,但键/结构不同。
为了简化页面的创建,我想用新的节点类型BlogPost
“包装”它们中的每一个,它们的结构与MarkdownRemark
相同。有简单的方法吗?
使用伪代码:
if(type == MarkdownRemark)
cloneNodeWithType({parent: node, type: "BlogPost", fields: {..node, ..node.fields})
else if (type==PostJson)
createNode({parent: node, type: "BlogPost", fields: {slug: node.permalink, html: node.content, ...})
要克隆该节点,我想我需要做(对于Remark节点):
createNode({ node: {
id: "str",
parent: node,
internal: {
mediaType: "text/html",
type: "ContentPage",
content: node.content,
contentDigest: node.contentDigest
},
fields: {
..node.fields
}
}})
对吧?
所以: 1.这是解决问题的好方法吗? 2.如何克隆节点?
非常感谢!
答案 0 :(得分:0)
这是正确的并且可以工作,但是还有一个挑战-插件通过Gatsby的setFieldsOnGraphQLNodeType
向节点添加了额外的“动态”字段,因为1)这些可能在onCreateNode
上还没有出现,并且2)这些通常不是值,而是诸如Remarks' html()
或excerpt(pruneLength: ...)
之类的函数。这些只需复制和粘贴(或import and reuse as I did)。