【发布时间】:2018-02-04 08:12:33
【问题描述】:
第一次尝试 Gatsby,很高兴。但是我遇到了一个奇怪的 GraphQL 问题:
我正在使用 gatsby-source-filesystem 和 gatsby-transformer-remark 插件从 markdown 文件中提取内容。
所有的frontmatter数据都不相同(title除外)。有些有一个date 字符串(博客文章),同样有一个tag 数组,有些有一个gallery 对象。
现在的问题是,这些任意分配的 frontmatter 数据中的一些在 GraphQL 中可用,而有些则不可用。例如,如果我尝试查询日期,我总是得到“GraphQL 错误未知字段date on type frontmatter_2”。而如果我查询标签,我会得到包含 1 的项目的标签数组和不包含的项目 tags: null。
这里有什么问题?如何始终将null 作为节点中不存在的字段的值?
可能需要注意的是,这种行为会根据我的降价文件的目录结构而改变。如果我移动它们,GraphQL 中的一些 frontmatter 字段将变得可用,而以前不可用,反之亦然。还有一种情况是,在通过 HMR 推送一些代码更改后,一些字段变得可用 - 但在我重新启动 Gatsby 后,尽管中间没有触及代码,但它们又消失了。
非常感谢您的帮助!
编辑:
在尝试了一段时间没有成功之后,我求助于确保所有 markdown frontmatter 具有相同类型的相同字段。
我猜
TODO 链接到关于自动推断类型/字段的文档。
documentation 的一部分是关于这个问题的。
当我有更多时间时,我想了解更多关于 GraphQL 以及它在 Gatsby 中的工作原理。任何指针表示赞赏。
【问题讨论】:
-
不是一个直接的答案,但请查看带有 Gatsby 的 GraphiQL,它对于了解什么时候可用的数据非常有帮助。 localhost:8000/___graphql
-
感谢您的评论。我知道 GraphiQL,它确实很有帮助。但是,我的问题是关于 gatsby-transformer-remark 如何解析 frontmatter 并决定哪些数据最终如何在节点接口中结束。 – 自从我问这个问题以来,它已经有很多更新了。也许它已经修复了……我得尽快再试一次。
-
Gatsby 从可用数据中“推断”出 GraphQL 模式。 This 问题表明某些字段(如果不是每条记录中都存在)可能偶尔会被删除。确保每个文档都包含每个字段的解决方法可能是最可靠的解决方案,至少目前是这样。