我创建了一个简单的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)
})
})
}
答案 0 :(得分:1)
由于Gatsby中的GraphQL服务器仅在开发期间(或在创建内部版本的情况下)运行,因此源插件无法定期开箱即用地推送数据。相反,您可以做的是按定期计划(每N分钟/小时/等)触发新的构建,以获取更新的数据。
如果您的构建需要一些时间才能完成,并且您想加快这一过程,那么您也可以考虑使用Gatsby Cloud,它支持进行增量构建(请注意:Gatsby Cloud是Gatsby提供的付费SaaS产品核心团队)。