全面拓展 HapiJS 使用场景的 9 个优雅解决方案

阅读时长 9 分钟读完

HapiJS 是一个流行的 Node.js Web 框架,它被许多公司和开发者使用。虽然 HapiJS 提供了许多内置的功能,但有时我们需要一些额外的功能或自定义解决方案。这篇文章将介绍 9 个优雅的解决方案,以拓展使用 HapiJS 的场景。

1. 使用好 Joi 对象实现输入验证

Joi 是一个强大的输入验证库,它可以用于检测来自客户端的数据。HapiJS 内置了 Joi,并且在使用 HapiJS 时自动安装。我们可以使用 Joi 让数据验证更加强大和个性化。

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

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

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

在路由配置选项中设置 validate.payload 对象,来完成请求数据的验证。在此过程中,Joi 将根据模式,验证请求 payload 中的每个属性,并确定它们是否有效。

2. 实现 Swagger 风格的 API 文档

API 文档在开发过程中非常重要,可以帮助其他开发人员(特别是前端开发人员)更快速和准确地理解 API。Swagger 是一个流行的 API 文档生成器,可以帮助我们快速构建 API 文档。

在 HapiJS 中使用 Swagger,可以完成如下几个步骤:

  • 安装hapi-swagger插件
  • 在路由配置选项中添加 Swagger 文档信息
  • 启动服务器并访问路由 swagger.json 即可查看 API 文档
-- -------------------- ---- -------
----- ----------- - ------------------------
----- - ------- - - ---------------------

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

3. 自定义 404 页面

在应用程序启动时,使用 HapiJS 路由的 not-found 方法,可以在应用程序中定义自己的 404 页面。

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

通过此方式,我们可以提高用户体验,同时帮助开发人员更快捷地调试应用程序。

4. 使用 HapiJS 插件管理系统增强应用

HapiJS 插件管理系统可以帮助我们很好地组织应用程序的代码,并增强我们的应用程序功能。插件系统提供了多种插件,包括认证、路由、数据缓存、邮件发送等,从而大大减少开发人员的工作量。

在路由选项中,添加相应的插件,并在应用程序中通过 await server.register() 安装即可。

5. 使用 hapi-auth-jwt2 插件实现 JWT 验证

JSON Web Tokens(JWT)是一种用于传输有关用户身份信息的安全方法。我们可以在 HapiJS 中使用 hapi-auth-jwt2 插件来为应用程序启用 JWT 验证。在安装auth插件管理系统后,hapi-auth-jwt2 是一种流行的安全插件。

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

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

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

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

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

6. 把 JWT token 放入 cookie 中

JWT 令牌通常存储在客户端本地存储中,但是在某些情况下(例如,如果你正在创建一个 SPA,或者你的应用程序不允许本地存储),你可能需要在 cookie 中存储 JWT 令牌。可以使用 hapi-auth-jwt2 插件将令牌存储在 cookie 中。

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

上述代码中,我们在 hapi-auth-jwt2 的选项中使用 cookieKeycookie,可以把 JWT token 放入 http cookies 中。

7. 使用 socket.io 实现实时通信

如果你正在构建一个需要实时通信的应用程序,那么可以使用 socket.io。在 HapiJS 中,socket.io 可以很容易地与 hapi-socketio 插件搭配使用,来增加应用程序的实时通信能力。

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

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

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

通过 HapiJS 插件管理器,我们可以使用 hapi-socketio 插件来实现增加实时通信能力。具体实现可以参照上述代码。

8. 使用 hapijs-status-monitor 插件来监控应用程序

这是一个强大的插件,可以用于监控应用程序的各种性能指标,例如请求速度、内存使用情况等。hapijs-status-monitor 可以帮助我们快速地发现性能问题,并对应用程序进行优化。

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

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

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

在路由选项中添加 hapijs-status-monitor,启动服务器后,可以通过 /status 访问监控页面。

9. 使用 hapi-pino 插件增强日志记录功能

在应用程序开发过程中,日志记录是非常重要的,可以帮助开发人员更好地了解应用程序中发生的事情。HapiJS 提供了默认的日志记录工具,但是我们可以使用 hapi-pino 插件来增强日志记录功能。

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

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

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

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

通过从 hapi-pino 插件的选项中传递 logger 对象,我们可以重写默认日志处理程序。除了默认值,hapi-pino 插件还具有其他优秀的配置项,例如 prettyPrint、redact 等。

结论

HapiJS 是一种非常强大的 Node.js 框架,它提供了许多内置功能,但是在有些时候,我们可能需要额外的功能或自定义解决方案。本文介绍了 9 个优雅的解决方案,以拓展使用 HapiJS 的场景。结合示例代码,我们希望可以帮助开发人员更好地了解 HapiJS 的功能和使用方式。

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

纠错
反馈