我正在尝试在我的 gatsby + apollo 项目的构建时添加一个搜索索引。
我尝试关注这篇文章:
我被卡住了,因为在示例中他们使用了集成在 gatsby 启动器中的 MarkdownRemark。但是我想使用从 Apollo 获取的数据(使用 gatsby-source-graphql)。
我需要获取的查询如下所示:
{
apollo {
allExampleData {
name
...
}
}
}
turorial 使用 context.nodeModel 来获取 MarkdownRemark ,它们都是独立的节点。在我的例子中,有 1 个 GraphQLSource 节点(= apollo)和它下面的几个集合(fe:allExampleData)。尝试获取 GraphQLSource 时,我没有看到任何孩子。
我用来获取数据的代码:
// gatsby-node.js
exports.createResolvers = ({ cache, createResolvers }) => {
createResolvers({
Query: {
LunrIndex: { // = name of the index
type: GraphQLJSONObject,
resolve: (source, args, context, info) => {
// fetching apollo node
const apolloNode = context.nodeModel.getAllNodes({
type: `GraphQLSource`,
})
// ... create index etc ...
}
}
})
这是我看到的变量 apolloNode 的响应:
// console.log(apolloNode)
{
id: '6b0123db-62eb-5c8c-9465-c75ecc7526f9',
typeName: 'Apollo',
fieldName: 'apollo',
parent: null,
children: [],
internal: {
type: 'GraphQLSource',
contentDigest: '0380f5a271ee2bec2ab7a95ec173714a',
ignoreType: true,
counter: 55,
owner: 'gatsby-source-graphql'
}
}
有什么方法可以基于此获取底层的 allIndustries 吗?还是有另一种方法可以在构建期间将数据推送到lunr?