#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. Спасибо! Это была именно проблема.