如果GraphQL返回null,使用Gatsby`createResolver`设置默认图像?

如果GraphQL返回null,使用Gatsby`createResolver`设置默认图像?,gatsby,wordpress,graphql,schema,Gatsby,Wordpress,Graphql,Schema,我在一个网站上工作,使用gatsby-source-wordpress来为博客提供帖子。但是,如果任何WordPress帖子不包含特色图片,则会导致构建失败。我理解这是预期的行为 以下是我看到的生成错误: 29{posts.map({node:post},index)=>( 30 | > 31 | | ^ 32 | 33 | 34 |{职务}

我在一个网站上工作,使用
gatsby-source-wordpress
来为博客提供帖子。但是,如果任何WordPress帖子不包含特色图片,则会导致构建失败。我理解这是预期的行为

以下是我看到的生成错误:
29{posts.map({node:post},index)=>(
30 |
  • > 31 | | ^ 32 | 33 | 34 |{职务} WebPackageError:TypeError:无法读取null的属性“localFile”
  • 这是由结果查询导致的,该查询在第二个节点中返回空结果,因为帖子上没有特征图像:

    {
    “数据”:{
    “allWordpressPost”:{
    “边缘”:[
    {
    “节点”:{
    “id”:“28ec9054-5b05-5f94-adcb-dcbfc14659b1”,
    “特色媒体”:{
    “id”:“f12d613b-e544-560b-a86f-cd0a7f87801e”,
    “本地文件”:{
    “id”:“7fca2893-ff80-5270-9765-d17d3dc21ac2”,
    “url”:”https://www.mycustomdomain.com/wp-content/uploads/2020/01/some-featured-image.jpg"
    }
    }
    }
    },
    {
    “节点”:{
    “id”:“91a236ed-39d5-5efc-8bed-290d8344b660”,
    “特色媒体”:空
    }
    }
    ]
    }
    }
    }
    
    我想如何修复: 作为一个理想的解决方案,如果WordPress中没有特色图片,我想使用模式定制来设置默认图片。但我完全不知道如何正确地设置。我正在从中工作以指导我,但我只是没有正确地将我的头缠绕在它周围

    类似的工作示例: 标签数据与特色图片类似,如果帖子没有标签,查询返回null。但是我可以使用
    createResolvers
    设置默认的
    undefined
    标签,如下所示:

    exports.createResolvers=({createResolvers})=>{
    常量解析程序={
    wordpress发布:{
    标签:{
    解析(源、参数、上下文、信息){
    常量{tags}=源
    if(tags==null | |(Array.isArray(tags)&&!tags.length)){
    返回[
    {
    id:'未定义',
    名称:“未定义”,
    slug:'未定义',
    }
    ]
    }否则{
    return info.originalResolver(源、参数、上下文、信息)
    }
    },
    },
    },
    }
    CreateResolver(解析程序)
    }
    
    其工作原理如以下查询结果所示:

    {
      "data": {
        "allWordpressPost": {
          "edges": [
            {
              "node": {
                "id": "28ec9054-5b05-5f94-adcb-dcbfc14659b1",
                "tags": [
                  {
                    "id": "undefined"
                  }
                ]
              }
            },
            {
              "node": {
                "id": "91a236ed-39d5-5efc-8bed-290d8344b660",
                "tags": [
                  {
                    "id": "50449e18-bef7-566a-a3eb-9f7990084afb"
                  },
                  {
                    "id": "8635ff58-2997-510a-9eea-fe2b88f30781"
                  },
                  {
                    "id": "97029bee-4dec-5198-95af-8464393f71e3"
                  }
                ]
              }
            }
          ]
        }
      }
    }
    
    我尝试的图像(不起作用…) 当涉及到嵌套节点和图像文件时,我完全不知所措。我正朝着以下方向前进,但到目前为止它不起作用:

    exports.createResolvers=({
    行动,
    隐藏物
    createNodeId,
    CreateResolver,
    商店,
    记者:,
    }) => {
    const{createNode}=操作
    常量解析程序={
    wordpress发布:{
    特色媒体:{
    类型:`File`,
    解析(源、参数、上下文、信息){
    返回createRemoteFileNode({
    网址:'https://www.mycustomdomain.com/wp-content/uploads/2017/05/placeholder.png',
    商店,
    隐藏物
    createNode,
    createNodeId,
    记者:,
    })
    },
    },
    },
    }
    CreateResolver(解析程序)
    }
    
    我意识到上面的代码没有一个
    if else
    语句,因此期望所有特征图像都会被占位符图像替换。但是结果GraphQL查询不受影响(如顶部所示)

    有人能给我指出正确的方向吗?我似乎不知道我能在那里找到什么信息

    WebPackageError:TypeError:无法读取null的属性“localFile”

    'localFile'为null
    表示null是
    localFile
    -
    featured\u media
    的父级。您可以在结果中看到:

    “特色媒体”:空

    …因此,您正在尝试修复
    本地文件
    ,而您应该在
    特色媒体
    级别上工作

    为什么?
    您可以很容易地在空节点上有条件地[在react中]呈现所需的内容(placeholde,component)…为什么您要尝试修复graphql响应?

    这是一个很好的观点,我可以有条件地呈现;我只是在看(更复杂)备选方案。是的,旨在专注于
    特色媒体
    而不是
    本地文件
    。其他场景-同一API或其他语言版本的第二个客户端/应用程序-覆盖默认值?检测数据中的“占位符”?API更改-检测也失败-空更安全、更通用