内容迁移:如何将 link 迁移到资产?

Contentful migrations: How to migrate a link to an asset?

我的内容类型 'blogpost' 当前包含对另一个名为 'image' 的内容类型的引用。内容类型 'image' 有一个 link 资产,一个图像文件。

现在我想创建一个迁移脚本,我 link 直接从 'blogpost' 条目到资产。

Current content model:
entry 'My blog post'
  → field 'image' 
    → link to entry 'My image entry' 
      → field 'image' 
        → link to asset 'My image asset'

Transform to:
entry 'My blog post' 
  → field 'mainImage' 
    → link to asset 'My image asset'

这是到目前为止的迁移:

module.exports = function (migration, { makeRequest }) {

    // Create new mainImage field in blogpost content type
    const blogpost = migration.editContentType('blogpost');
    blogpost
        .createField('mainImage')
        .name('Main Image')
        .type('Link')
        .linkType('Asset')
        .validations([
            {
                'linkMimetypeGroup': ['image']
            }
        ]);

    migration.transformEntries({
        contentType: 'blogpost',
        from: ['image'],
        to: ['mainImage'],
        transformEntryForLocale: async function (fromFields, currentLocale) {

            // Get the the entry of type 'image' from the blogpost's 'image' field
            const imageEntryId = fromFields.image[currentLocale].sys.id;
            const imageEntry = await makeRequest({
                method: 'GET',
                url: `/entries/${imageEntryId}`
            });

            return { mainImage: imageEntry.fields.image[currentLocale] };
        }
    });
}

我已经尝试将 'mainImage' 字段映射到 imageEntry.fields.image 和 imageAsset 的不同部分,但我似乎无法正确映射。

我通常在 运行 迁移脚本时收到此错误消息。我的语言环境是 'nb-NO':

TypeError: 无法读取未定义的属性(读取 'nb-NO')

我终于弄清楚我哪里做错了,上面的错误信息是什么意思。

迁移脚本本身按预期工作,但它因没有图像的博文条目而崩溃。

当 fromFields.image 为空时此行崩溃:

const imageEntryId = fromFields.image[currentLocale].sys.id;

我将其替换为以下空检查:

if (fromFields.image === null || typeof (fromFields.image) === "undefined") {
    return;
}
    
const imageEntryId = fromFields.image[currentLocale].sys.id;