如果字段为空,如何在graphql结果中显示NULL

Posted

技术标签:

【中文标题】如果字段为空,如何在graphql结果中显示NULL【英文标题】:How to show NULL in graphql result if the field is empty 【发布时间】: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 获取内容来创建页面时,我有一个条件来检查被迭代的项目是否是这些占位符之一,如果是,它只是忽略它。 【参考方案1】:

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

【讨论】:

以上是关于如果字段为空,如何在graphql结果中显示NULL的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 查询:如果不为空,则仅包含字段

GraphQL 查询:如果不为空,则仅包含字段

记录为空时,Access 2010 查询仍显示结果

GraphQL Apollo Server,如何使字段将空字符串注册为空

在查询SQL语句中为空或者不为空的字段应该怎么写?

AWS放大graphql突变:不能为不可为空的字段返回null