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 插件管理系统可以帮助我们很好地组织应用程序的代码,并增强我们的应用程序功能。插件系统提供了多种插件,包括认证、路由、数据缓存、邮件发送等,从而大大减少开发人员的工作量。
const server = Hapi.server({ port: 3000, host: "localhost", }); await server.register({ plugin: require('blipp') })
在路由选项中,添加相应的插件,并在应用程序中通过 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 的选项中使用 cookieKey
和 cookie
,可以把 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