Hapi.js 的使用方法总结(二)

在上一篇文章中,我们介绍了 Hapi.js 的一些基础知识和使用方法。在本篇文章中,我们将更深入地探究 Hapi.js 的用法。我们将主要讨论以下三个方面:

  1. 路径参数
  2. 认证和授权
  3. 插件和中间件

路径参数

在路由中,我们经常需要处理包含参数的 URL,例如 /users/:id。在 Hapi.js 中,处理这种路径参数非常容易。我们可以在路由路径中添加占位符,例如:

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

在请求处理函数中,我们可以通过 request.params 对象获取路径参数。例如,上面的代码中的 const id = request.params.id 就可以得到路径中的 id 参数。

路径参数也支持类型验证。例如,我们可以使用 Joi 库来验证参数是否符合特定的格式:

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

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

在这个例子中,我们要求 id 参数必须是一个整数,否则会返回 400 错误。

认证和授权

在实际应用中,我们通常需要对用户进行认证和授权。Hapi.js 提供了丰富的认证和授权机制,可以满足各种需求。

认证

Hapi.js 支持多种认证方式,包括:

  • cookie
  • token
  • basic
  • OAuth

我们可以在路由中使用 auth 选项来指定需要进行认证的方式。例如,下面的路由需要进行 cookie 认证:

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

在这个例子中,我们使用 auth 选项来指定采用 session 认证方式。如果用户未进行认证或认证失败,Hapi.js 会返回 401 错误。

授权

在进行认证之后,我们还需要对用户进行授权。Hapi.js 提供了可以方便地实现授权的机制,包括:

  • role-based
  • scope-based
  • entity-based

我们可以在路由中使用 authplugins 选项来指定授权策略。例如,下面的路由需要用户具有 admin 角色:

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

在这个例子中,我们使用 authplugins 选项来指定采用 session 认证方式,并且要求用户具有 admin 权限。如果用户未进行认证或认证失败,或者用户没有 admin 角色,Hapi.js 会返回 401 错误。

插件和中间件

Hapi.js 提供了丰富的插件和中间件,可以轻松地扩展它的功能。我们可以使用 server.register 方法来注册插件。例如,下面的代码注册了 hapi-pino 插件,用于记录访问日志:

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

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

在注册插件之后,我们可以通过 server.ext 方法来添加全局中间件。例如,下面的代码添加了一个全局中间件,用于记录每个请求的处理时间:

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

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

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

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

在这个例子中,我们使用了 hapi-pino 插件和 server.ext 方法,实现了一个简单的日志记录中间件。

结论

Hapi.js 是一款非常优秀的 Node.js 框架,它的设计理念和用法都非常符合现代 Web 开发的需求。通过本文的介绍,我们可以更深入地了解 Hapi.js 的用法,掌握一些高级特性。希望本文对您有所帮助,也希望您会喜欢使用 Hapi.js 进行开发!

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671a508e9babaf620fa28c7d