gatsby - Gatsby sourceNode 不适用于 GraphQL 参数
问题描述
目前我正在尝试从 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"
}
]
}
}
}
}
解决方案
所以我找到了一个解决方案。问题在于要过滤的数据是内容对象的条目。这意味着它们没有 NodeId 并且不可过滤。解决方案是添加一个action.createNode
来自 API 的 foreach 条目,而不是大量添加。
推荐阅读
- asp.net - 通过 aspnet_regsql.exe 创建 ASP.NET 会话表的各种困难
- android - Xamarin Froms Carousel 页面在移动到以前的图像时出现 Source not Found 错误
- ios - 有没有办法免费为大约 500 个用户分发 IOS 应用程序(没有开发者帐户)?
- reactjs - 如何在类型脚本中为新类型继承模型类型?
- javascript - React Router 不显示组件
- python - 如何
使用 Python BeautifulSoup 将分隔的项目存储到单独的数组中? - composer-php - 我正在尝试使用 composer 安装 drush。但面临“加密无法打开流”问题
- laravel - 上传文件时 Laravel 仅存储文件名
- mysql - MySQL 8.0 版的 Bugzilla 安装错误
- laravel - 在 laravel 中嵌套复杂的 ACL