Angular & Contentful: невозможно создать ресурс внутри пространства

У меня есть приложение Angular, которое использует Contentful (v. 5.1.3). Я хочу загрузить ресурс в Contentful из приложения Angular. Согласно официальному сайту, правильный способ сделать это:

client.getSpace('<space_id>')
.then((space) => space.createAsset({ ... })

Смотрите здесь: https://www.contentful.com/developers/docs/references/content-management-api/

Проблема в том, что Space объект не имеет createAsset метод. Фактически, единственные методы, которыми он обладает, это locales, name, sys а также toPlainObject,

Я установил Contentful с npm install contentful, Есть ли какая-то проблема с пакетом? Есть ли причина, почему Space объект был лишен всех полезных методов?

Спасибо,

Alex

2 ответа

Решение

Вам нужно использовать contentful-management.js библиотека, а не contentful.js библиотека для создания активов. Если вы заметили в примере кода по указанной вами ссылке, она использует библиотеку управления:

const contentful = require('contentful-management')

const client = contentful.createClient({
  accessToken: '<content_management_api_key>'
})

client.getSpace('<space_id>')
.then((space) => space.createAsset({
  fields: {
    title: {
      'en-US': 'Playsam Streamliner'
    },
    description: {
      'en-US': 'Streamliner description'
    },
    file: {
      'en-US': {
        contentType: 'image/jpeg',
        fileName: 'example.jpeg',
        upload: 'https://example.com/example.jpg'
      }
    }
  }
}))
.then((asset) => asset.processForAllLocales())
.then((asset) => console.log(asset))
.catch(console.error)

Обратите также внимание на то, что space.createAsset(...)был объявлен устаревшим в contentful-management@5и полностью удален через некоторое время. К сожалению, на момент написания этой статьи документация по API все еще не отражала это изменение.

В качестве альтернативы вы можете использовать эту функцию вне environmentпространство имен:

      const space = await client.getSpace('space-id');
const environment = await space.getEnvironment('master');
const asset = await environment.createAsset({ ... });

Заметки о критических изменениях здесь.

Другие вопросы по тегам