我希望与Gatsby.js的文件系统路由API一起工作,从私有GraphQL API中的集合生成页面。似乎文件系统路由API总是使用'all'收集请求来生成这些(allFile
,allSite
,allPost
等)。
因为我的数据来自一个单独的API,在Gatsby的模式中没有等效的'all'集合,并且我的数据也被gatsby-source-graphql
插件命名在一个字段内。
是否可以定义我自己的'all'集合供Gatsby使用?我想别名allFacilities
到my-remote-api { facilities }
,但我不确定这是否可能。
如果没有,还有其他方法吗?
File System Route API是Gatsby (^2.26.0
)开发的动态创建页面的新品牌,去掉了gatsby-node.js
的GraphQL查询,使用了/pages
文件夹中的语法符号({}
、[]
、()
等)。
在您的用例之后,您需要通过添加"all"前缀来推断和修改模式。关键字(可能使用createNodeFactory
和createNodeHelpers
从gatsby-node-helpers package
,不知道确切的数据模式和结构,很难猜测一个示例代码),但思路是:
const nodeHelpers = createNodeHelpers({
typePrefix: 'Shopify',
createNodeId,
createContentDigest,
})
}
默认情况下,这将作为"all"关键字,创建allShopify
节点,可被文件系统路由API查询和使用。
另一方面,有"old"方法:使用GraphQL在您的gatsby-node.js
,使用createPage
API动态创建页面,使用上下文传递数据(通常是唯一标识符),并且,在模板中,使用另一个查询过滤该唯一值来获取您的数据(即:在gatsby-node.js
文件中,您查询所有帖子并动态创建页面(使用createPage
API)为每个帖子,使用分段值。然后,使用上下文传递一个标识符(符号或标题),并在模板中(不是/pages
作为文件系统路由API)创建一个通过该唯一值过滤的查询来获取您的帖子数据。
如果您不能使用helper自定义节点,那么第二种方法可能适合您的需求。这是盖茨比文档提供的关于这部分的指南。