graphql - Gatsby 和 Strapi 可选数据的问题

标签 graphql gatsby strapi

我有一个用 Strapi 制作的模型,其中包含可用于添加社交媒体链接的特定组件。每个链接都包含一个文本字段和一个链接字段。一切都按预期进行,除非我将其留空。如果有 0 个链接,我会收到如下所示的错误。

这是该组件在 Strapi 内部的外观: enter image description here

Gatsby GraphQL 尝试访问链接:

strapiWebsiteSetting {
    footerSocialLinks {
      text
      link
    }
    footerOtherLinks {
      text
      link
    }
  }

添加 0 个链接时出现的错误: enter image description here

有没有办法让 GraphQL 即使添加了 0 个链接也能工作。我试过了 将以下代码添加到 gatsby-node.js 但不起作用:

exports.createSchemaCustomization = ({ actions }) => {
    const { createTypes } = actions;
    const typeDefs = `
      type STRAPI__COMPONENT_LINK_FOOTER_OTHER_LINK implements Node {
        id: ID!
        parent: Node
        children: [Node!]!
        internal: Internal!
        text: String
        link: String
        strapi_id: Int
      }
      type STRAPI__COMPONENT_LINK_FOOTER_SOCIAL_MEDIA_LINK implements Node {
        id: ID!
        parent: Node
        children: [Node!]!
        internal: Internal!
        text: String
        link: String
        strapi_id: Int
      }
    `;
    createTypes(typeDefs);
};

最佳答案

让 gatsby 和 Strapi 使用可选属性甚至可选记录的一种不太痛苦的方法如下:

  1. 安装gatsby-plugin-schema-snapshot插件。
  2. 在 gatsby-config.js 中将“update”选项设置为“true”(也可以通过环境变量处理):
    {
      resolve: `gatsby-plugin-schema-snapshot`,
      options: {
        update: true,
      },
    }
  • 使用具有至少一条记录(例如虚拟记录)和所有属性的所有内容类型构建您的应用。这会在应用文件夹的根目录中创建一个 schema.gql 文件。
  • 将插件的“更新”选项设置为“false”并删除您的虚拟记录。
  • 再次构建。不再提示:)
  • 关于graphql - Gatsby 和 Strapi 可选数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72141333/

    相关文章:

    javascript - 带有 graphql 请求的 FormData

    javascript - Gatsby:类型错误:无法读取 null 的属性 'map'

    url - 如何为具有多个域及其内容的 Gatsby 网站提供服务?

    javascript - NextJS - 在 getStaticProps 中获取动态变量

    c# - 将 GraphQL 从 .NET core 2.2 升级到 3.0

    node.js - 如何在谷歌云平台上部署strapi?

    javascript - Strapi 动态区域 - 在 Gatsby 中显示图像

    node.js - 尽管我使用了正确的凭据,但 Strapi 在生产中给了我数据库错误

    sequelize.js - self._expandAttributes 不是函数

    Gatsby google-tagmanager 插件 : how to access dataLayer. 推送