如何解决 Gatsby 中 Graphql 查询中不存在的类型

How to workaround non existent types in Graphql query in Gatsby

我正在构建一个带有博客部分的网站,在部署到生产环境时,博客将是空的。我在 Gatsby 网站上允许空博客时遇到问题。

当我 运行 npm run develop 只有当我有一些博客时它才会工作 - 我希望它在添加博客之前工作。

我遇到的主要问题是尝试容纳 allStrapiBlogstrapiBlog 等不存在的字段,因为没有博客。

我在 blog 组件和我的 nav 组件(我有条件使用的查询)上遇到这样的错误。

  15:17  error  Cannot query field "allStrapiBlog" on type "Query"  graphql/template-strings
Cannot query field "strapiBlog" on type "Query"

这就是我的导航组件的查询。但它会抛出一个错误——有没有办法让它变成 return null?

query NavigationQuery {
    allStrapiBlog {
        nodes {
            title
            strapi_id
        }
        totalCount
    }
}

如何让不成功的 GraphQL 查询不破坏构建,这样我就可以构建一个带有空博客的 gatsby 站点?

But it throws an error - is there a way to make it just return null?

确实,您需要 configure your GraphQL schema 以允许可为空的字段。

您有一个样板文件,您可以调整它以匹配 https://www.virtualbadge.io/blog-articles/nullable-relational-fields-strapi-gatsbyjs-graphql 处的数据类型。

这个想法依赖于在 gatsbt-node.js 中使用 createSchemaCustomization API 添加您自己的类型定义。

类似于:

exports.createSchemaCustomization = ({ actions }) => {
  const { createTypes } = actions;
  const typeDefs = `
    type StrapiBlogPost implements Node {
      title: String!
      content: String
      thumbnail: File
    }
  `;
  createTypes(typeDefs);
};

在这种情况下,需要title(因为!,这意味着类型是non-nullable),而contentthumbnail可以为空。

之后,您只需调整您的组件即可避免 code-breaking 提取空数据时的逻辑。