如果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更改-检测也失败-空更安全、更通用