【发布时间】:2020-04-13 00:17:44
【问题描述】:
我在 Gatsby 中使用 Strapi 作为我的前端页面的 cms。
在 Strapi 中,我有一个内容类型 Pages。 Pages 内容类型与所有其他内容类型存在多对多关系。
因此我的内容类型如下:
- 页数
- 页脚
- 标题
查询如下:
query MyQuery {
allStrapiPage {
edges {
node {
footers {
name
}
headers {
name
}
}
}
}
}
我得到了我应该得到的所有结果。
因此,结果如下:
{
"data": {
"allStrapiPage": {
"edges": [
{
"node": {
"footers": [
{
"name": "Footer ONE"
}
]
}
},
{
"node": {
"headers": [
{
"name": "Header one"
}
]
}
},
]
}
}
}
但是,如果我在上述查询的 footers 或 headers 内容类型中没有任何记录,则会收到如下错误:
"Cannot query field \"footers\" on type \"StrapiPage\".
这不是我想要的。如何在不存在的字段上获取 null?因此,如果footers 内容类型为空,我希望结果如下:
{
"data": {
"allStrapiPage": {
"edges": [
{
"node": {
"footers": null
}
},
{
"node": {
"headers": [
{
"name": "Header one"
}
]
}
},
]
}
}
}
我该怎么做?
提前致谢。
【问题讨论】:
-
我没用过strapi,但是你能控制strapi后端吗?
-
@RakeshJain 仅通过他们的管理面板。
-
如果可能的话,您可以在 API 上为页脚创建解析器,您可以在其中检查数据是否存在,如果不存在则返回 null。此外,如果您为页脚返回 null,您需要确保页脚在架构中不严格,否则也会出错。
-
这不是一个解决方案,而是一个“简单”的解决方法,我在遇到类似问题时决定采用(使用 Contentful,而不是 Strapi)。我为我拥有的每种内容类型定义了“占位符”。所有这些占位符都是用填充的所有属性定义的。然后,当我从
gatsby-node获取内容来创建页面时,我有一个条件来检查被迭代的项目是否是这些占位符之一,如果是,它只是忽略它。
标签: reactjs graphql gatsby strapi