Исходный плагин Gatsby показывает только последний элемент в массиве в GraphQL

#javascript #node.js #graphql #gatsby #gatsby-plugin

#javascript #node.js #graphql #gatsby #gatsby-плагин

Вопрос:

Когда я регистрирую консоль после запуска сборки, в моем массиве drinks отображаются объекты 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. Я пробовал map вместо forEach

Ответ №1:

Я столкнулся с точно такой же проблемой, как и вы, несколько месяцев назад, и в моем случае мне нужно было установить допустимый внутренний id для каждого элемента, чтобы GraphQL мог создавать правильную схему для каждого узла, если нет, id переопределяется в каждом элементе, и требуется только последний.

В вашем случае кажется, что какое-то поле неверно, что делает следующее выражение недопустимым:

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

Попробуйте отладить больше того, что получает, и измените его на какое-то жестко заданное значение. Что-то вроде:

     id: drink.id,
 

Имейте в виду, что, если значения id s различны для каждого узла, вам не нужно использовать createNodeId API для целей отладки (но это рекомендуется).

Комментарии:

1. Спасибо! Это была именно проблема.