ошибка «gatsby-transformer-cloudinary» выдала ошибку при запуске жизненного цикла onCreateNode

#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. спасибо, это полезно — я подумал, что это может быть частью решения этой проблемы. Я согласен, что изменить базу данных проще, к сожалению, это может быть невыполнимо. Однако я сделал очень простой патч для плагина, который «исправляет» это. прокомментировано выше, возможно, не идеально!