【问题标题】:How to show NULL in graphql result if the field is empty如果字段为空,如何在graphql结果中显示NULL
【发布时间】:2020-04-13 00:17:44
【问题描述】:

我在 Gatsby 中使用 Strapi 作为我的前端页面的 cms。

在 Strapi 中,我有一个内容类型 PagesPages 内容类型与所有其他内容类型存在多对多关系。

因此我的内容类型如下:

  • 页数
  • 页脚
  • 标题

查询如下:

query MyQuery {
  allStrapiPage {
    edges {
      node {      
        footers {
          name
        }
        headers {
          name
        }
      }
    }
  }
}

我得到了我应该得到的所有结果。

因此,结果如下:

{
  "data": {
    "allStrapiPage": {
      "edges": [
        {
          "node": {
            "footers": [
              {
                "name": "Footer ONE"
              }
            ]
          }
        },
        {
          "node": {
            "headers": [
              {
                "name": "Header one"
              }
            ]
          }
        },
     ]
   }
  }
}

但是,如果我在上述查询的 footersheaders 内容类型中没有任何记录,则会收到如下错误:

"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


【解决方案1】:

我刚加入,还不能评论帖子,所以我会把它放在答案部分。您是否检查过您在架构中将页脚和页眉定义为可空字段?这可能会导致您的错误

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 2015-05-07
    • 2017-09-28
    • 1970-01-01
    相关资源
    最近更新 更多