npm包@ianwalter/bff使用教程

阅读时长 7 分钟读完

前言

@ianwalter/bff 是一款基于 Node.js 平台的后端聚合层框架,其主要作用是将多个后端服务聚合后,提供一个基于 RESTful 风格的 API 给前端项目调用。本篇文章将介绍如何使用该框架来开发 BFF 层,包括环境搭建、配置文件解读、路由定义、过滤器设置等内容。

环境搭建

安装 Node.js

由于 @ianwalter/bff 是基于 Node.js 平台开发的,所以在开始使用前,需要先安装 Node.js 环境。在官方网站https://nodejs.org/上下载对应系统的安装包,安装即可。

初始化项目

在终端中新建一个空文件夹,然后通过命令 npm init -y 初始化项目,生成 package.json 文件。接下来,通过命令 npm install --save @ianwalter/bff 安装 @ianwalter/bff。

配置文件解读

在初始化完项目后,可以发现在项目根目录下生成了 bff.config.js 文件。该文件是 @ianwalter/bff 使用的配置文件,下面是该文件的配置项说明:

-- -------------------- ---- -------
-------------- - -
  -- ----
  --------- -
    -- --- -----------------
    -------- ------- -------------------
  --
  -- ----
  ------- -
    -
      -- ----
      ----- -------
      -- -----
      -------- ------ ----- ---- ----- -- ----
      -- ------
      -------- ----- ----- ---- ----- -- --
    -
  -
--
展开代码
  • apiProxy:API 代理配置项,包括 targets 数组,用于存放代理目标地址。可以配置多个目标地址,每个被代理的请求会依次传递到每个目标地址中,直到其中一个地址能够响应数据或全部尝试失败。

  • routes:路由配置项,包括 pathfiltershandler 三个属性。

    • path:路由路径,为字符串类型,支持正则表达式。

    • filters:路由过滤器,为一个异步函数数组。每个过滤器函数会在路由处理函数执行前被调用,可以在其中对请求和响应做相应的处理。

    • handler:路由处理函数,为一个异步函数。当请求和过滤器处理后,路由处理函数会最终处理请求并返回响应结果。

路由定义

接下来,我们来定义一个简单的路由,通过该路由聚合多个后端 API 并返回结果。在路由配置项中,我们首先需要定义一个代理目标地址,然后定义一个路由路径和一个路由处理函数。

-- -------------------- ---- -------
----- ----- - -----------------
-------------- - -
  -- ----
  --------- -
    -- --- -----------------
    -------- -- ----- ----------------- --
  --
  -- ----
  ------- -
    -
      -- ----
      ----- ---------
      -- ------
      -------- ----- ----- ---- ----- -- -
        --- -
          -- ------
          ----- --------- - ----- ----------------------
          ----- --------- - ----- ----------------------

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

以上路由配置项定义了一个 /myapi 路由,当接收到该路由的请求时,会依次请求 /api/foo/api/bar 接口,并将结果聚合后返回给前端。

过滤器设置

在上面的路由配置中,我们看到了过滤器 filters 的配置项,该项允许我们在路由处理前对请求进行处理。在这里,我们将通过一个过滤器向请求头中添加一个身份验证信息。

-- -------------------- ---- -------
----- ----- - -----------------
-------------- - -
  -- ----
  --------- -
    -- --- -----------------
    -------- -- ----- ----------------- --
  --
  -- ----
  ------- -
    -
      -- ----
      ----- ---------
      -- -----
      -------- ------ ----- ---- ----- -- -
        ----- ----- - ------ -- --------
        ------------------------- - ------- ---------- -- ------------
        ------- -- ----------
      ---
      -- ------
      -------- ----- ----- ---- ----- -- -
        --- -
          -- ------
          ----- --------- - ----- ----------------------
          ----- --------- - ----- ----------------------

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

通过在过滤器中添加身份验证信息,可以避免在每个处理函数中都添加该信息,并提高代码复用性。

总结

在本文中,我们详细介绍了如何使用 @ianwalter/bff 开发 BFF 层,包括环境搭建、配置文件解读、路由定义、过滤器设置等内容。通过本文的学习,可以帮助前端开发者更好地理解和使用该框架,并在实际项目中更高效地开发 BFF 层。下面是上面路由示例代码的完整文件:

-- -------------------- ---- -------
----- ----- - -----------------
-------------- - -
  -- ----
  --------- -
    -- --- -----------------
    -------- -- ----- ----------------- --
  --
  -- ----
  ------- -
    -
      -- ----
      ----- ---------
      -- -----
      -------- ------ ----- ---- ----- -- -
        ----- ----- - ------ -- --------
        ------------------------- - ------- ---------- -- ------------
        ------- -- ----------
      ---
      -- ------
      -------- ----- ----- ---- ----- -- -
        --- -
          -- ------
          ----- --------- - ----- ----------------------
          ----- --------- - ----- ----------------------

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

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