Gatsby 盖茨比构建/创建页面:错误处理

Gatsby 盖茨比构建/创建页面:错误处理,gatsby,Gatsby,我正在使用盖茨比建立一个非常大的网站(5k+页面,300k+图像)。源数据不可靠(例如字段经常丢失),这会导致createPage过程中出错 问题是,如果一次createPage运行抛出错误,整个构建就会失败。因此,有时5k页面构建成功,然后整个过程由于一个错误而崩溃 我尝试将页面创建包装在一个try…catch中,但没有任何区别: 试试看{ 创建页面({ 路径:node.slug, 组件:path.resolve(`./src/templates/BlogPost.js`), 背景:{ id:

我正在使用盖茨比建立一个非常大的网站(5k+页面,300k+图像)。源数据不可靠(例如字段经常丢失),这会导致
createPage
过程中出错

问题是,如果一次
createPage
运行抛出错误,整个构建就会失败。因此,有时5k页面构建成功,然后整个过程由于一个错误而崩溃

我尝试将页面创建包装在一个
try…catch
中,但没有任何区别:

试试看{
创建页面({
路径:node.slug,
组件:path.resolve(`./src/templates/BlogPost.js`),
背景:{
id:node.id,
},
});
}捕获(错误){
console.log(错误);
}
(我还尝试在组件级别检查数据,如果数据不完整,则返回
null
,但
createPage
仍会创建一个(空白)页面,我不希望这样:如果数据不完整,我只希望跳过该页面

所以我的问题是:如何在构建过程中处理错误/失败的页面创建,从而跳过失败的页面,而不是使整个构建崩溃?


注意:这几乎是的重复,但解决方案对我不起作用:我不能在数据错误的情况下呈现错误页面,我需要完全跳过该页面,如果这是可能的

您应该为源数据显式定义GraphQL模式:

这样,GraphQL调用将不会返回错误,而是返回节点上缺少字段的
null
。然后,您可以检查这些falsy值并跳过
createPage
调用

例如,在我的示例中,我为
页面
类型显式定义了GraphQL模式:


如果最终用户没有创建任何页面(通过在内容/页面中创建文件),查询将返回
null
,我可以检查:

您应该为源数据显式定义GraphQL模式:

这样,GraphQL调用将不会返回错误,而是返回节点上缺少字段的
null
。然后,您可以检查这些falsy值并跳过
createPage
调用

例如,在我的示例中,我为
页面
类型显式定义了GraphQL模式:


如果最终用户没有创建任何页面(通过在内容/页面中创建文件),查询将返回
null
,我可以检查:

您可以在将数据传递给createPage之前验证数据?是的,这是最终的解决方案,不是吗?我真的试图避免这种情况,因为我们的构建时间已经很疯狂了,在每个产品上验证深层json只会增加这一点。但如果真的没有其他办法,那我就不得不这么做:(300k图像…哇!你可以在将数据传递给createPage之前验证数据?是的,这是最终的解决方案,不是吗?我真的试图避免这种情况,因为我们的构建时间已经很疯狂,在每个产品上验证深json只会增加这一点。但如果真的没有其他方法,我就必须这样做:(300k图片…哇哦!非常棒,正是我所需要的-感谢分享回购协议,非常有用,可以看到它在实践中如何工作。绝对棒,正是我所需要的-感谢分享回购协议,非常有用,可以看到它在实践中如何工作