内容迁移:如何将 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;
我的内容类型 '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;