前言
内容管理系统(CMS)是现代 Web 开发中不可或缺的工具之一。Contentful 是一款领先的云端 CMS,提供了一整套用于构建、发布和管理数字内容的服务。
contentful-resource-transform 是一个可以帮助开发者在将 Contentful 的内容使用在自己的项目中时,更便捷快速地处理资源(Resource)的工具库。
本篇文章将带你深入了解这个 npm 包的使用教程,包括安装和配置、基础使用、进阶使用和高级应用。
安装和配置
使用 contentful-resource-transform,你需要先安装此 npm 包并设置好项目中的参数。即在终端输入以下命令:
$ npm install contentful-resource-transform
在 Node.js 文件中引入并配置对应参数:
const contentfulResourceTransform = require("contentful-resource-transform"); contentfulResourceTransform.configure({ space: '<CONTENTFUL_SPACE_ID>', accessToken: '<CONTENTFUL_ACCESS_TOKEN>', ... });
其中,space ID 和 access token 可以在 Contentful 的网站中的“Settings”→“API Keys”→“Content Delivery / Preview tokens”中找到。
基础使用
在获取 Contentful 上的资源后,使用 contentful-resource-transform 可以快速处理资源,以适应当前项目的需求。
contentfulResourceTransform.toPlainObject(contentfulEntry); contentfulResourceTransform.toArrayOfPlainObjects(contentfulEntries);
分别对应将 Contentful 上的一个资源(Entry)和多个资源(Entries)转换为纯 JavaScript 对象的方法。
例如,获取 Contentful 上的一个 “Article”:
-- -------------------- ---- ------- ----- ---------- - ---------------------- ----- ------ - ------------------------- ------ ------------------------ ------------ ---------------------------- --- ------------------------------------- ----------------------- -- - ----- ----------- - ----------------------------------------------------------- ------------------------- -- ----------------------
如果获取的是多个资源:
client.getEntries() .then((contentfulEntries) => { const arrayOfPlainObjects = contentfulResourceTransform.toArrayOfPlainObjects(contentfulEntries); console.log(arrayOfPlainObjects); }) .catch(console.error);
这样获得的 arrayOfPlainObjects 就是包含了多个纯 JavaScript 对象的数组了。
进阶使用
有时候你需要使用更加高效的方法,针对一类资源(比如“Article”)的获取和处理。此时你可以使用 contentful-resource-transform 提供的“transformer”和“mapper”方法。
contentfulResourceTransform.transformSingleResource(contentfulEntry, 'article'); contentfulResourceTransform.transformMultipleResources(contentfulEntries, 'article'); contentfulResourceTransform.mapSingleResource(contentfulEntry, 'article', (article) => { /* ... */ }); contentfulResourceTransform.mapMultipleResources(contentfulEntries, 'article', (article) => { /* ... */ });
transformSingleResource
和 transformMultipleResources
分别用于针对一个或多个资源,把它们分别转换为某个类型的 JavaScript 对象。mapSingleResource
和 mapMultipleResources
则不仅针对一个或多个资源进行转换,还支持传入一个回调函数,并在此函数中对对象进行进一步操作(比如条件过滤,增删改查)。
例如,转换一个 Contentful 上的 “Article”:
contentfulResourceTransform.transformSingleResource(contentfulEntry, 'article');
如果是批量的 “Article”:
contentfulResourceTransform.transformMultipleResources(contentfulEntries, 'article');
你可以看到,在这里,‘article’ 是指定的类型字符串。
如果你想对获取的 “Article” 进行自定义操作,可以使用 mapSingleResource 或者 mapMultipleResources:
contentfulResourceTransform.mapMultipleResources(contentfulEntries, 'article', (article) => { if (article.publishedStatus === 'published') { return article; } } );
高级应用
既然 contentful-resource-transform 是一个工具库,那么我们就可以在它的基础上开发出更加高级的应用。
例如,我们可以使用高阶函数来建立一个高度自定义的转换器。
-- -------------------- ---- ------- -------- ---------------------------- ------------------ - ------ --------------- - --- ---- - --- ------ - ------------- ------ -- ----------------------------------------------- - --------------- - ------------------------------------ ------ ---------- ----------- --- ------ ----- -- - ----- ----------------- - --------------------------- ------- ------ ---------- ---------- -- - -- ---------- --- ----------- -- --------- --- ----------- - ------ ---- -------- ----- - ------ ------ --- ----- -------------- - ------------------------ ------- ------ ---------- ---------- -- - -- ---------- --- ------- - ------ ----- - ------- - ------ ------ --- ------------------- --------------------------------- - --- ------- - ------------------------------------------------------------------------- --------- ------------------- ---- - ------------------------------------------------------------------------- ------ ---------------- ---
通过创造一个接受自定义转化方法的高阶函数 createTransformer,你就可以更好地控制转换过程,例如生成自定义的属性、手动添加某个值等。
结语
本篇文章为你介绍了 contentful-resource-transform 的安装和配置、基础使用、进阶使用和高级应用。相信通过本文的学习,你能够更好地管理和使用 Contentful 上的资源,并在自己的项目中发挥更大的作用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/93737