1

当我运行 build 6 后控制台日志显示在我的饮料数组中。当我运行开发时,它们也会出现。但是当我查询 graphQL 时,只有数组中的最后一个对象可用。我是 gatsby 和 graphQL 的新手,所以包含图片以防我的查询关闭。代码来自我的 gatsby-node.js 文件:

exports.sourceNodes = async (
    { actions, createContentDigest, createNodeId,}
  ) => {
  const NODE_TYPE = "CocktailRecipes";
    try{ 
    const response = await fetch(`https://www.thecocktaildb.com/api/json/v1/1/search.php?s=vodka`)
    const data = await response.json();
    const {drinks} = data;
    console.log(drinks)
    drinks.forEach((drink) => {
      actions.createNode({
        ...drink,
        id: createNodeId(`${NODE_TYPE }-${drink.id}`),
        parent:null,
        children:[],
        internal:{
          type:NODE_TYPE,
          content:JSON.stringify(drink),
          contentDigest: createContentDigest(drink)
        }
      })
    })
    }
    catch(error){ 
      console.log("ERROR")
      console.log(error)
    }
  }

graphQL 中只显示一个对象

如果有人可以提供帮助,我将不胜感激,因为我已经将头撞在墙上一段时间了。我已经完成了 gatsby clean。我试过 map 而不是 forEach

4

1 回答 1

1

几个月前我遇到了和你完全相同的问题,在我的情况下,我需要id为每个元素设置一个有效的内部,以允许 GraphQL 为每个节点创建一个适当的模式,如果没有,id则在每个节点中都被覆盖元素,它只需要最后一个。

在您的情况下,似乎某些字段是错误的,使以下表达式无效:

    id: createNodeId(`${NODE_TYPE }-${drink.id}`),

尝试调试更多正在接收的内容并将其更改为一些硬编码值。就像是:

    id: drink.id,

请记住,如果id每个节点的 s 不同,则无需使用createNodeIdAPI进行调试(但建议这样做)。

于 2020-12-14T16:17:25.537 回答