在上一篇文章中,我们介绍了 Hapi.js 的一些基础知识和使用方法。在本篇文章中,我们将更深入地探究 Hapi.js 的用法。我们将主要讨论以下三个方面:
- 路径参数
- 认证和授权
- 插件和中间件
路径参数
在路由中,我们经常需要处理包含参数的 URL,例如 /users/:id
。在 Hapi.js 中,处理这种路径参数非常容易。我们可以在路由路径中添加占位符,例如:
{ method: 'GET', path: '/users/{id}', handler: function (request, h) { const id = request.params.id; // ... } }
在请求处理函数中,我们可以通过 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
我们可以在路由中使用 auth
和 plugins
选项来指定授权策略。例如,下面的路由需要用户具有 admin
角色:
-- -------------------- ---- ------- - ------- ------ ----- --------- -------- -------- --------- -- - ------ ------- -------- -- -------- - ----- - --------- ---------- ------ ------- - - -
在这个例子中,我们使用 auth
和 plugins
选项来指定采用 session
认证方式,并且要求用户具有 admin
权限。如果用户未进行认证或认证失败,或者用户没有 admin
角色,Hapi.js 会返回 401 错误。
插件和中间件
Hapi.js 提供了丰富的插件和中间件,可以轻松地扩展它的功能。我们可以使用 server.register
方法来注册插件。例如,下面的代码注册了 hapi-pino
插件,用于记录访问日志:
const HapiPino = require('hapi-pino'); await server.register({ plugin: HapiPino, options: { prettyPrint: true } });
在注册插件之后,我们可以通过 server.ext
方法来添加全局中间件。例如,下面的代码添加了一个全局中间件,用于记录每个请求的处理时间:
-- -------------------- ---- ------- ----------------------- --------- -- -- - ----- ----- - ----------- ----------------------------------- ---- ------- --- ------ ----------- --- --------------------------- --------- -- -- - ----- --- - ----------- ----- - ---- - - ------------------------------------ ------ ---- ----------------- ----- --- - ----- --- ------ ----------- ---
在这个例子中,我们使用了 hapi-pino
插件和 server.ext
方法,实现了一个简单的日志记录中间件。
结论
Hapi.js 是一款非常优秀的 Node.js 框架,它的设计理念和用法都非常符合现代 Web 开发的需求。通过本文的介绍,我们可以更深入地了解 Hapi.js 的用法,掌握一些高级特性。希望本文对您有所帮助,也希望您会喜欢使用 Hapi.js 进行开发!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/671a508e9babaf620fa28c7d