Hapi 框架中插件的开发与使用

阅读时长 10 分钟读完

Hapi 是一个完备的 Node.js Web 应用程序框架,具有良好的插件扩展机制,可以极大地简化应用程序的开发过程。插件可以提供路由、身份验证、缓存、数据库等功能,让应用程序更加健壮和可扩展。在本文中,我们将探讨 Hapi 插件的开发与使用,希望对前端开发者有所启发。

插件开发

准备工作

在开始之前,请确保您已经安装了 Node.js 和 Hapi。如果没有,请参考 Hapi 官方文档 进行安装。

创建插件

插件是一个通过 module.exports 导出的对象。以下是一个简单的插件:

这个插件只是一个简单的输出信息的函数,可以在 Hapi 应用程序中以以下方式使用:

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

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

-------
展开代码

在注册插件时,Hapi 将调用插件中的 register 函数,这个函数会接收 Hapi 服务器对象和插件选项。此函数中通常会设置路由、身份验证、缓存等插件特定的功能。

Plugin options

插件选项可以通过插件导出对象中的 options 属性来实现。以下是一个带有选项的插件:

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

在注册插件时可以提供选项,例如:

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

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

-------
展开代码

这里将覆盖插件默认的 exampleOption 选项。

从文件夹加载插件

在应用程序中可以从文件夹加载一个或多个插件,如下所示:

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

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

-------
展开代码

在文件夹中的插件必须具有 nameversion 属性。

Hapi-PLUGIN 模式的插件开发

插件可以使用 Hapi-PLUGIN 模式开发,在这种模式下插件只需定义一个单独的函数并返回一个函数。通常情况下,这些插件函数是异步的,接收一些参数。

以下是 Hapi-PLUGIN 模式的插件示例:

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

可以看到,Hapi-PLUGIN 模式的插件开发更加简洁和清晰。

插件使用

官方插件

首先,值得注意的是 Hapi 附带了一些官方插件,例如:

  • hapi-auth-basic: 基本 HTTP 身份验证。
  • hapi-auth-cookie: 基于 Cookie 的身份验证。
  • hapi-pino: 得到 pino 记录器和日志记录工具。
  • hapi-rate-limit: 基于 Redis 的速率限制。
  • hapi-swagger: 自动生成文档的 Swagger 接口元数据。

等等。

这些插件可以根据需要使用。例如:

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

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

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

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

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

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

-------
展开代码

在这里我们添加了 hapi-auth-basic 和 hapi-auth-cookie 插件,并创建了一个名为“simple”的身份验证策略。

自定义插件

自定义插件可以提供许多不同的功能。

例如:

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

这个插件可以返回一个固定的响应。

在内部,插件可以使用服务器实例的方法,如 server.route()server.auth.strategy() 等。

就像前面的示例中一样,插件可以具有选项。这些选项传递给插件的 register 函数。

预先定义的插件选项

Hapi 框架提供了许多默认选项,可以通过这些选项来控制插件的行为。

  • routes: 插件使用的路由。
  • once: 插件只执行一次。
  • multiple: 插件可多次执行。
  • dependencies: 插件依赖于其他插件。
  • data: 保存插件数据。
  • sandbox: 为插件提供隔离的沙盒环境。

options 属性中指定这些选项。

回调函数

在 Hapi 插件中,可以使用回调函数来报告插件的异步执行结果。

以下是一个异步操作完成后执行回调函数的例子:

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

在这个例子中,我们向服务器实例发出一个事件,以通知我们操作已经完成。

插件应用程序接口

Hapi 框架提供了一些可用于插件的方法和属性:

  • server.plugins.pluginName: 按名称访问已注册的插件。
  • server.decorate(type, property, method): 为 Hapi 服务器添加新的装饰项。
  • server.ext(events, method): 为特定事件添加服务器扩展点。
  • server.realm: 返回当前服务器对应的 realm 对象,控制插件是否可以访问服务器实例的属性和方法。

总结

插件是 Hapi 框架的重要组成部分,可以大大简化应用程序的开发和维护。在本文中,我们讨论了如何创建自定义插件,并探讨了如何使用官方插件。希望这篇文章对前端开发者有所启发,并在 Hapi 开发中提供了一些指导。

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

纠错
反馈

纠错反馈