更新Gatsby源插件中的数据

时间:2019-12-18 19:14:32

标签: gatsby

我创建了一个简单的gatsby源插件,可以提取api数据。到目前为止,一切都很好–它完全可以按需提取数据。

但是,有一个问题。 api数据会定期更新。也就是说,新文章会添加到api中。我想知道是否有可能用新文章更新Gatsby中的graphql数据而不会丢失已经获取的数据。

如果是,怎么办?

谢谢。

P.S。如果相关,这是插件的代码:

const fetch = require("node-fetch")

exports.sourceNodes = (
  { actions, createNodeId, createContentDigest },
  config
) => {
  const { createNode } = actions

  delete config.plugins

  const processFeed = item => {
    const nodeId = createNodeId(`[NODE_NAME]-${item.id}`)
    const nodeContent = JSON.stringify(item)
    const nodeData = Object.assign({}, item, {
      id: nodeId,
      parent: null,
      children: [],
      internal: {
        type: `[TYPE_NAME]`,
        content: nodeContent,
        contentDigest: createContentDigest(item),
      },
    })
    return nodeData
  }

  ...

  return fetch([FETCH_URL], [FETCH_HEADERS])
    .then(response => response.json())
    .then(data => {
      data.items.forEach(item => {
        const nodeData = processFeed(item)
        createNode(nodeData)
      })
    })
}

1 个答案:

答案 0 :(得分:1)

由于Gatsby中的GraphQL服务器仅在开发期间(或在创建内部版本的情况下)运行,因此源插件无法定期开箱即用地推送数据。相反,您可以做的是按定期计划(每N分钟/小时/等)触发新的构建,以获取更新的数据。

如果您的构建需要一些时间才能完成,并且您想加快这一过程,那么您也可以考虑使用Gatsby Cloud,它支持进行增量构建(请注意:Gatsby Cloud是Gatsby提供的付费SaaS产品核心团队)。