如何解决 Gatsby 中 Graphql 查询中不存在的类型
How to workaround non existent types in Graphql query in Gatsby
我正在构建一个带有博客部分的网站,在部署到生产环境时,博客将是空的。我在 Gatsby 网站上允许空博客时遇到问题。
当我 运行 npm run develop
只有当我有一些博客时它才会工作 - 我希望它在添加博客之前工作。
我遇到的主要问题是尝试容纳 allStrapiBlog
和 strapiBlog
等不存在的字段,因为没有博客。
我在 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),而content
和thumbnail
可以为空。
之后,您只需调整您的组件即可避免 code-breaking 提取空数据时的逻辑。
我正在构建一个带有博客部分的网站,在部署到生产环境时,博客将是空的。我在 Gatsby 网站上允许空博客时遇到问题。
当我 运行 npm run develop
只有当我有一些博客时它才会工作 - 我希望它在添加博客之前工作。
我遇到的主要问题是尝试容纳 allStrapiBlog
和 strapiBlog
等不存在的字段,因为没有博客。
我在 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),而content
和thumbnail
可以为空。
之后,您只需调整您的组件即可避免 code-breaking 提取空数据时的逻辑。