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

前言

作为一个前端程序员,我们经常需要用到后端,而 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


猜你喜欢

  • npm包 @pinkyo/validatorjs 使用教程

    在前端开发中,表单验证是常见的需求之一。但是实现起来却十分繁琐,需要编写很多的代码。因此,许多开发者都选择使用现成的表单验证库来简化工作流程。 其中,@pinkyo/validatorjs 是一个很好...

    3 年前
  • npm 包 qubex-date 使用教程

    前言 在前端开发中,日期的处理是非常常见的操作,而且对于不同的项目和业务需求,我们需要的日期格式也不尽相同。为了方便地处理日期,有不少的第三方库或插件可以选择,其中 qubex-date 就是一款不错...

    3 年前
  • npm 包 babel-plugin-transform-dev-prod-expression 使用教程

    前言 在前端开发中,我们通常会将代码分为开发环境和生产环境,不同的环境会引入不同的依赖、配置和代码。开发者需要在不同环境下进行调试和测试,而项目上线时则需要将开发环境下的所有配置、调试的代码等都删除,...

    3 年前
  • npm 包 lpi-multireducer 使用教程

    介绍 lpi-multireducer 是一个用于 Redux 多 reducer 管理的 npm 包,并且提供了 Redux Store 增加多个 reducer 的方法。

    3 年前
  • npm-fast-mirror 使用教程

    什么是 npm-fast-mirror npm-fast-mirror 是一个 npm 源镜像加速工具,它可以在 npm 源下载速度比较慢的情况下,提供一种快速的下载方式。

    3 年前
  • npm 包 @simenb/travis-ci 使用教程

    简介 Travis CI 是一款持续集成工具,可以自动化构建、测试和部署您的项目。@simenb/travis-ci 是一款 npm 包,可以帮助前端开发者方便地在 Travis CI 上集成自己的项...

    3 年前
  • npm 包 grandsea_utils 使用教程

    前言 npm 是目前使用最广泛的 JavaScript 包管理工具,它为我们提供了大量好用的工具包,方便了我们的开发工作。grandsea_utils 是一款实用的 npm 工具包,它集成了各种前端常...

    3 年前
  • npm 包 project-google 使用教程

    前言 在前端开发中,我们经常需要和 Google 相关的服务打交道,比如使用 Google Maps API 来实现地图功能,或者使用 Google Analytics 来统计网站流量。

    3 年前
  • npm 包 react-native-nfc-module 使用教程

    前言 NFC(Near Field Communication,近场通讯)是一种基于现场无线电通信的短距离高频无线通讯技术。NFC 可以实现非接触式的点对点数据传输。

    3 年前
  • npm 包 bzrest 使用教程

    前言 随着前端技术的不断发展,npm 包已经成为前端开发不可或缺的一部分。而其中一款相对较为重要的 npm 包是 bzrest,它是一个用于与后端 API 进行交互的库,使得前端开发者能够更加方便地与...

    3 年前
  • npm包tictok使用教程

    在前端开发中,我们经常会用到各种npm包来提高我们的工作效率,其中tictok是一个非常实用的npm包,可以帮助我们更便捷地实现时间倒计时效果。本文将介绍npm包tictok的使用方法,希望对前端开发...

    3 年前
  • npm 包 autodebugger 使用教程

    在前端开发中,调试是一个必不可少的环节。然而,当我们遇到比较复杂的问题时,往往需要在代码中添加一些调试语句来找到问题所在。如果这些调试语句经常需要添加和删除,那将会是一件比较麻烦的事情。

    3 年前
  • npm 包 staticy 使用教程

    在前端开发中,处理静态资源(如图片、js、css等)是必不可少的工作。而处理静态资源时使用 npm 包 staticy 可大大减轻我们的工作量。本文将为大家详细介绍 staticy 的使用方法和一些注...

    3 年前
  • npm 包 flappycoin 使用教程

    在现代 web 开发中,我们经常会使用 npm 包来帮助我们快速开发项目,并加快代码的开发速度。在这个笔记中,我们将重点介绍一个名为 flappycoin 的 npm 包,它是一个专门为前端开发者设计...

    3 年前
  • npm 包 generator-web-starter-react 使用教程

    前言 React 是一款广泛应用于前端开发的 JavaScript 库,很多 web 开发人员都选择使用它来构建可伸缩、高效并且易于维护的 web 应用程序。但是,使用 React 开发应用需要具备一...

    3 年前
  • npm 包 npmtestshaoshuai 使用教程

    npmtestshaoshuai 是一款用于前端开发的 NPM 包,它提供了一系列的方法来帮助前端开发人员更加高效地完成开发任务。本文将为大家详细介绍如何使用 npmtestshaoshuai 包,包...

    3 年前
  • 使用 React Native Smart Pull to Refresh ListView Upgrade 包

    如果你是一个前端开发人员,你可能熟悉 React Native。今天,我们将介绍如何在你的 React Native 项目中使用一个名为 React Native Smart Pull to Refr...

    3 年前
  • npm 包 bookshelf-joi 使用教程

    什么是 bookshelf-joi bookshelf-joi 是一个基于 bookshelf ORM 内核和 Joi 验证库封装的 npm 包。它为前端开发者提供了一种简单易用的方式来对数据库操作进...

    3 年前
  • npm 包 allex_leveldbbanksetlib 使用教程

    简介 allex_leveldbbanksetlib 是一个基于 Node.js 环境下的 npm 包,它提供了用于操作 LevelDB 数据库的功能。该库封装了 LevelDB 的操作方法,并提供了...

    3 年前
  • npm 包 node-scylla 使用教程

    什么是 node-scylla node-scylla 是一个基于 Scylla 数据库的 Node.js 客户端。它提供了对 Scylla 数据库的连接、查询、批处理、索引、事务等功能的支持。

    3 年前

相关推荐

    暂无文章