Gatsby sourceNode 不适用于 GraphQL 参数
Posted
技术标签:
【中文标题】Gatsby sourceNode 不适用于 GraphQL 参数【英文标题】:Gatsby sourceNode does not work with GraphQL arguments 【发布时间】:2020-07-19 07:24:05 【问题描述】:目前我正在尝试从 API 中提取一些数据并使用 sourceNode 和 createNode API 添加到 GraphQL:
exports.sourceNodes = async ( actions, createNodeId, createContentDigest ) =>
const modules = ['data', 'stuff', 'bananas'];
const modulesResponse = Promise.all(modules.map(async (module) => getModuleData(module)));
const modulesData = await modulesResponse;
const content = Object.fromEntries(modules.map((entries, index) => [entries, modulesData[index]]));
actions.createNode(
id: createNodeId(modules.join(',')),
parent: null,
children: [],
content,
internal:
type: 'myData',
mediaType: 'text/html',
contentDigest: createContentDigest(content)
);
当我尝试使用参数过滤这个(使用 GraphiQL)时,它似乎不起作用:
myData(content: data: elemMatch: filterEntry: eq: "foo")
content
data
filterEntry
结果如下:
"data":
"myData":
"content":
"data": [
"filterEntry": "foo"
,
"filterEntry": "bar"
,
"filterEntry": "baz"
]
【问题讨论】:
我不确定您的 graphql 语法是否正确?我相信过滤器总是写成filter:
而不是content:
。 gatsbyjs.org/docs/graphql-reference/#filter
我也不确定,但是当通过 gatsby 创建的另一个节点时,它也有过滤选项也不起作用
【参考方案1】:
所以我找到了解决方案。问题在于要过滤的数据是内容对象的条目。这意味着它们没有 NodeId 并且不可过滤。解决方案是添加一个来自 API 的 action.createNode
foreach 条目,而不是直接放入。
【讨论】:
以上是关于Gatsby sourceNode 不适用于 GraphQL 参数的主要内容,如果未能解决你的问题,请参考以下文章
GraphQL 查询适用于 Gatsby 页面,但不适用于类组件
malihu 自定义滚动条插件不适用于 Electron.js
模式中不存在的 Gatsby `S3Object`。在添加解析器之前使用`createTypes`添加类型