【问题标题】:Gatsby createSchemaCustomization add custom field to every nodeGatsby createSchemaCustomization 向每个节点添加自定义字段
【发布时间】:2020-09-14 15:15:55
【问题描述】:

我正在为其他 gatsby 前端开发一个 gatsby 插件,该插件使用 graphql 检索内容数据。
我正在扩展createSchemaCustomization API,因为我想向每个节点添加一个新字段(比如contentful_id)字段。

Graphql 允许通过访问者模式更新查询,因此我将contentful_id 字段附加到每个graphql 节点,并在插件gatsby-node.js 中添加了这个解析器(setFieldsOnGraphQLNodeType,但它已被弃用)到这个字段这样如果 graphql 节点找不到contentful_id,它就不会崩溃。

exports.setFieldsOnGraphQLNodeType = () => {
  return {
    contentful_id: {
      type: GraphQLString,
      resolve: (source) => {
        return source.contentful_id || '';
      },
    },
  };
};

另外,我不知道每个 gatsby 前端在自己的页面中生成了多少个节点。

我想达到的是以下
对于每个 gatsby 前端生成的所有类型,添加一个名为 contentful_id 的新 String 字段

【问题讨论】:

    标签: plugins graphql gatsby


    【解决方案1】:

    我正在开发一个使用 GraphQL 检索内容数据的 Gatsby 插件。

    您正在构建的内容称为source plugin

    通常情况下,您将实现 Gatsby sourceNodes API。这是一个改编自the docs的例子:

    // first, you'll need to source from Contentful
    const { getContentfulNode, getContentfulId } = require("./get-contentful-node.js")
    
    exports.sourceNodes = ({ actions, createNodeId, createContentDigest }) => {
      const { createNode } = actions
    
      const nodeData = getContentfulNode()
      const contentfulId = getContenfulId()
    
      const node = {
        ...nodeData,
        contentful_id // this is where you add your field to the node
        // node metadata
        id: createNodeId(`my-data-${myData.key}`),
        parent: null,
        children: [],
        internal: {
          type: `MyNodeType`,
          mediaType: `text/html`,
          content: JSON.stringify(nodeData),
          contentDigest: createContentDigest(myData)
        }
      }
    
      const node = Object.assign({}, myData, nodeMeta)
      createNode(node)
    }
    

    如果您已经获取了节点,但想在sourceNodes之外向它们添加一个额外的字段,我会使用onCreateNode API。您可以检查该节点是否为ContentfulNode 类型(例如),如果是则添加一个字段。

    【讨论】:

      猜你喜欢
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多