npm 包 generator-simple-hapi-and-nats-api 使用教程

阅读时长 8 分钟读完

前言

作为一个前端程序员,我们经常需要用到后端,而 Node.js 可以让我们在前端领域获得更丰富的选择。在 Node.js 生态系统中,有很多可以用来构建 Web API 的框架。在这些框架中,Hapi.js 是一个很好的选择,它能让你构建可维护和可伸缩的 Web 服务。同时,它也是一个非常流行的框架,community-driven,发展迅速。

在实际项目中,我们可能需要与后端使用消息中间件来进行通讯,例如 NATS (又叫作 Kafka 的轻量级版),它是一个高性能、低延迟,分布式消息服务,最初是由 Cloud Native Computing Foundation(CNCF)赞助使用的。

在本篇文章中,我们将结合使用 Hapi.js 和 NATS,介绍如何使用 generator-simple-hapi-and-nats-api,一个非常方便的生成器,它们可以非常容易地在 Hapi 和 NATS 之间创建 Web API。

安装

首先,你需要在你的本地机器上安装 Yeoman 和 generator-simple-hapi-and-nats-api:

创建项目

进入一个新的目录,你可以通过运行以下命令来启动生成器:

接着,你需要回答几个问题,例如项目名称和描述,然后 Press Enter。接下来,你需要选择你要为你的项目使用的 Hapi.js 版本和 NATS 版本。这个选择非常重要,因为该选择会决定生成的代码的兼容性。

结构

执行成功后,将生成以下目录结构:

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

其中,

  • app.js 是主应用程序,
  • config 目录存储各种环境的配置,
  • index.js 是应用程序入口点,
  • plugins 目录包含注册到 Hapi 服务器的插件,
  • routes 目录包含处理请求的路由器。

接下来我们来逐步学习这些文件是如何协同工作的。

配置

config 目录下,存放了各种环境下的配置文件,这些文件默认是针对 default 环境的,你可以通过设置环境变量 NODE_ENV 来加载其他的环境配置,例如

此时将使用 production.js 中的配置。

默认情况下,该生成器已经为你提供了 4 个环境的配置选项:

  • default.js:用于默认环境的配置。
  • development.js:用于开发环境的配置,包括允许的 API 请求速率限制、数据库连接字符串等。
  • production.js:用于生产环境的配置,包括日志级别、拥有的最大工作进程等。
  • test.js:用于测试环境的配置,包括数据库连接 URL、测试运行时间等。

路由

路由定义如下:

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

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

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

这里定义了一个路由器,当你访问 /api/health 时,会触发调用一个 NATS 的服务 server.identity(后面会提到),并 返回一个包含 success 属性的对象,表明服务状态是健康的。这是一个简单的 ARTS Endpoint 范例,其返回内容和状态代码可以根据实际应用的情况进行定义。

另外,这里的服务名称和版本是从 package.json 中获取的,你可以在这里添加其他的自定义参数。

插件

插件功能提供了轻松构建代码的方法,可以将在不同的代码文件中使用的函数、文件路径等,封装为插件名称,并在需要使用他们时注入到代码中,避免了很多重复的代码编写。

在本实例中,插件用于定义运行时需要的功能,包括 NATS 消费者、数据库连接、缓存服务等。插件差别于路由,它们是整个应用程序共享的。

这里的插件定义如下:

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

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

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

这个插件定义了一个新的业务日志记录器,并把它挂载到了符合 Hapi 插件规范的 server 对象上,提供了更强大、更多变更的管道功能。

类似于路由器,这里的插件定义也是一个数组。每个对象都应具有两个属性:

  • plugin 构造器对象,必需
  • options 插件的选项,可选

具有 register 方法的插件构造函数将自动由 Hapi 呈现到 server 实例中,可以在之后被任意 route 加载和使用。

主程序

在 app.js 中的内容如下:

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

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

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

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

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

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

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

-------

你可以看到,主要的逻辑都被封装在了我们的方法 start() 中。首先,我们实例化了一个 Hapi 服务器,然后 传入了我们预定义的路由和插件。

在实际的项目中,我们可以改写这部分逻辑,并且可以利用 pm2 等工具进行进程管理。

运行

现在,你可以在命令行中输入以下内容来运行你生成的程序:

在这个例子中,当你访问 http://localhost:3000/api/health 时,会通过 NATS 发送一条消息,而这条消息可以被后端服务的者监控、许多执行代码的细节都隐藏在了我们的代码之中。

此外,你可以尝试自己去添加其他的路由、扩展你的插件。总结来说,generator-simple-hapi-and-nats-api 为我们提供了一个轻松构建 Web API 的方式,我们可以专注于实现接口自身的逻辑,将更大精力投入项目的应用和进程管理中。

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

纠错
反馈