Angular & Contentful:无法在 space 中创建资产

Angular & Contentful: Cannot create asset inside a space

我有一个使用 Contentful(5.1.3 版)的 Angular 应用程序。我想从 Angular 应用程序将资产上传到 Contentful。根据官方网站,正确的做法是:

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

看这里:https://www.contentful.com/developers/docs/references/content-management-api/#/reference/assets

问题是 Space 对象没有 createAsset 方法。事实上,它仅有的方法是 localesnamesystoPlainObject.

我用 npm install contentful 安装了 Contentful。包裹有什么问题吗? Space 对象被剥夺了所有有用的方法是有原因的吗?

谢谢,

亚历克斯

您需要使用 contentful-management.js 库而不是 contentful.js 库来创建资产。如果您在所提供的 link 的代码示例中注意到,它正在使用管理库:

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({ ... });

重大更改说明是 here