#gatsby #cloudinary
#gatsby #cloudinary
Вопрос:
Я взаимодействую с серверной частью MongoDB с gatsby. Существует узел, который иногда содержит изображения, а иногда и нет, поэтому каждый из этих узлов имеет дочерний узел внутри него, называемый cloudinary. Я получаю сообщение об ошибке от gatsby-transformer-cloudinary, появляющееся при попытке автоматического создания узлов, как описано здесь: https://www.npmjs.com/package/gatsby-transformer-cloudinary в разделе «Использовать изображения, которые уже есть в Cloudinary».
наша структура узлов немного похожа на эту:
artwork: {
mediaItems: {
cloudinary: {
cloudinaryAssetData: true,
... other relevant stuff
}
}
mediaItems: {
... this one doesn't contain a cloudinary image node
}
иногда у MediaItem будет указанный выше узел в структуре MongoDB, иногда нет. Затем я получил сообщение об ошибке ниже
cannot convert undefined or null to object
53 | const currentNode = basePath === '' ? node : get(node, basePath);
54 |
> 55 | const directAssetDataPaths = Object.keys(currentNode)
| ^
56 | .filter(key => {
57 | return currentNode[key] amp;amp; currentNode[key].cloudinaryAssetData === true;
58 | })
TypeError: Cannot convert undefined or null to object
- Function.keys
- create-asset-nodes-from-data.js:55 getAssetDataPaths
[rca-wip-2021-public]/[gatsby-transformer-cloudinary]/gatsby-node/create-asset-nodes-from-data.js:55:39
- create-asset-nodes-from-data.js:72
[rca-wip-2021-public]/[gatsby-transformer-cloudinary]/gatsby-node/create-asset-nodes-from-data.js:72:12
- _arrayMap.js:16 arrayMap
[rca-wip-2021-public]/[gatsby-transformer-cloudinary]/[lodash]/_arrayMap.js:16:21
Я попытался добавить пустые узлы в базу данных с помощью cloudinaryAssetData: false везде, где нет изображения, чтобы попытаться исправить это, но пока это не сработало. Как показано ниже:
mediaItems: {
cloudinary: {
cloudinaryAssetData: false
}
}
Похоже, что gatsby автоматически создает нулевые данные для любых пустых полей / узлов, это может быть проблемой. Если у кого-нибудь есть какое-либо представление об этом, я был бы благодарен. Возможно, я смогу решить эту проблему, установив значения по умолчанию или изменив данные в gatsby, или, возможно, изменив структуру MongoDB (но это гораздо сложнее изменить).
Ответ №1:
Gatsby способен автоматически выводить схему GraphQL из ваших данных, и во многих случаях это действительно все, что вам нужно. Однако бывают ситуации, когда вы либо хотите явно определить форму данных, либо добавить пользовательские функции к уровню запросов, добавив свойство nullability к некоторым полям.
Конечно, при такой настройке вы погружаетесь в создание схемы GraphQL и, возможно, проще изменить структуру MongoDB, чтобы добавить несколько пустых или фиктивных полей и обрезать их после запроса, если вам неудобно настраивать схему.
Комментарии:
1. спасибо, это полезно — я подумал, что это может быть частью решения этой проблемы. Я согласен, что изменить базу данных проще, к сожалению, это может быть невыполнимо. Однако я сделал очень простой патч для плагина, который «исправляет» это. прокомментировано выше, возможно, не идеально!