npm 包 contentful-resolve-response 使用教程

阅读时长 10 分钟读完

前言

在现代 Web 开发中,前后端分离的架构已经成为一种趋势。而前端真正紧密联系着后端的是 API 接口。不同的 API 实现方式也不同。有些接口返回的数据是类似于 JSON 的格式,有些则是一些奇怪的格式。不管是哪种,前端都要花费时间去处理这些数据。

在一些大型的 Web 应用中,有时 API 返回的数据相对复杂,前端需要经过一系列的处理和转换才能使用。为此,我们需要一个工具帮助我们更好地处理数据。

contentful-resolve-response 是一个可以处理复杂 API 返回数据的包,本篇文章将介绍这个包的使用方式以及它的一些优点和注意事项。

安装

使用

假设我们的 API 返回的数据格式如下:

-- -------------------- ---- -------
-
  ------- -
    ----- ------
    ------- ----------
    ------------- -
      -------- ------ -------
      ------- ------ --- ------
      ----------- -
        -
          ----- --
          ------- ---- -- --------
        --
        -
          ----- --
          ------- ------- -----------
        --
        -
          ----- --
          ------- --- ------ -- -------
        -
      -
    -
  -
-
展开代码

我们的前端需要解析这个数据,并将其转换成以下格式:

-- -------------------- ---- -------
-
  ----- ------
  -------- ------ -------
  ------- ------ --- ------
  ----------- -
    -
      ----- --
      ------- ---- -- --------
    --
    -
      ----- --
      ------- ------- -----------
    --
    -
      ----- --
      ------- --- ------ -- -------
    -
  -
-
展开代码

通常来说,我们可以使用 JavaScript 的一些原生方法去解析这个数据,但是这些方法比较冗长,代码可读性较差。使用 contentful-resolve-response 则可以使代码更为简洁而且易于维护。

首先,我们需要在文件中导入 contentful-resolve-response 包:

之后,我们可以调用 resolveResponse 方法对数据进行解析:

其中 data 表示需要转换的数据。

最后,我们可以使用返回的 parsedData 对象来进行前端渲染。

深入解析

数据类型

contentful-resolve-response 可以用于解析以下数据类型:

  • Plain JSON object
  • JSON:API-format object
  • Contentful API-format object

尤其是 Contentful API-format object,这是 Contentful 官方提供的数据格式,包含多个嵌套的关系型数据。

处理数组

contentful-resolve-response 可以很好地处理被嵌套在数组内部的数据。

比如说,我们的 API 返回的数据是这个样子:

-- -------------------- ---- -------
-
  ------- -
    -
      ------- -------
      ----- ----
      ------------- -
        ------- -------
        -------- -
          -
            -------- ------ ----- ---
            ------- ------ --- ---- ---
            ----------- -
              -
                ----- --
                ------- ---- -- ------- --
              -
            -
          --
          -
            -------- ------ ----- ---
            ------- ------ --- ---- ---
            ----------- -
              -
                ----- --
                ------- ---- -- ------- --
              --
              -
                ----- --
                ------- ---- -- ------- --
              -
            -
          -
        -
      -
    --
    -
      ------- -------
      ----- ----
      ------------- -
        ------- --------
        -------- -
          -
            -------- ------ ----- ---
            ------- ------ --- ---- ---
            ----------- -
              -
                ----- --
                ------- ---- -- ------- --
              -
            -
          -
        -
      -
    -
  -
-
展开代码

我们使用 contentful-resolve-response 解析数据后,得到的转换后的数据格式如下:

-- -------------------- ---- -------
-
  -
    ----- ----
    ------- -------
    -------- -
      -
        -------- ------ ----- ---
        ------- ------ --- ---- ---
        ----------- -
          -
            ----- --
            ------- ---- -- ------- --
          -
        -
      --
      -
        -------- ------ ----- ---
        ------- ------ --- ---- ---
        ----------- -
          -
            ----- --
            ------- ---- -- ------- --
          --
          -
            ----- --
            ------- ---- -- ------- --
          -
        -
      -
    -
  --
  -
    ----- ----
    ------- --------
    -------- -
      -
        -------- ------ ----- ---
        ------- ------ --- ---- ---
        ----------- -
          -
            ----- --
            ------- ---- -- ------- --
          -
        -
      -
    -
  -
-
展开代码

处理日期

早些时候,我们使用 Date.parse 方法来解析日期,但是当时间格式不规则时就会出现问题。contentful-resolve-response 则更好地解决了这个问题。

我们的 API 返回的数据有一个时间字段:

-- -------------------- ---- -------
-
  ------- -
    ----- ------
    ------- ----------
    ------------- -
      -------- ------ -------
      ------- ------ --- ------
      ------------- --------------------------
    -
  -
-
展开代码

我们使用 contentful-resolve-response 解析数据后,得到的转换后的数据格式如下(注意属性名的变化):

contentful-resolve-response 使用 moment.js 来解析时间,并将其转化成 JavaScript 的 Date 对象。

处理嵌套的数据

我们的 API 返回的数据有下面这样的结构:

-- -------------------- ---- -------
-
  ------- -
    ----- ------
    ------- ----------
    ---------------- -
      --------- -
        ------- -
          ------- -------
          ----- -----
        -
      --
      ----------- -
        ------- -
          -
            ------- ----------
            ----- ---
          --
          -
            ------- ----------
            ----- ---
          -
        -
      -
    -
  --
  ----------- -
    -
      ------- -------
      ----- ------
      ------------- -
        ------- ----- ----
      -
    --
    -
      ------- ----------
      ----- ----
      ------------- -
        ------- ---- -- --------
      -
    --
    -
      ------- ----------
      ----- ----
      ------------- -
        ------- ------- -----------
      -
    -
  -
-
展开代码

使用 contentful-resolve-response 转换后的数据格式如下:

-- -------------------- ---- -------
-
  ----- ------
  --------- -
    ----- ------
    ------- ----- ----
  --
  ----------- -
    -
      ----- ----
      ------- ---- -- --------
    --
    -
      ----- ----
      ------- ------- -----------
    -
  -
-
展开代码

可以看到,contentful-resolve-response 成功将被嵌套在 included 数组里的数据解析成了对应的属性。

总结

contentful-resolve-response 是一个非常有用的前端工具,它可以帮助我们解析日益复杂的 API 返回数据。通过本章的介绍,你应该已经了解到该包的功能及优点,如果你在前端开发中需要对复杂的 API 数据进行解析,不妨试试该包。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/104506