在 Web 开发中,对于客户端所发送的数据,我们通常需要对其进行校验和转换,以保证数据的正确性和可用性。Hapi 和 Joi 就是两个可以帮助我们实现这个目的的工具。接下来,我们将详细介绍 Hapi 和 Joi 的使用方法。
Hapi 框架简介
Hapi 是一个用于构建 web 应用和服务的框架,它具有以下特点:
- 支持插件式架构,易于扩展;
- 提供统一的请求和响应处理机制;
- 支持路由定义和校验、表单数据解析等常用功能;
- 面向插件的生命周期管理,支持启动和停止插件;
- 具有详细的文档和社区支持。
Joi 校验器简介
Joi 是一个专门用于校验对象的库,它支持的特性包括:
- 支持对字符串、数字、日期等多种数据类型进行校验;
- 支持嵌套对象的校验;
- 支持多种校验规则,包括必须、至少、最多、无空格等等;
- 支持自定义校验函数和错误消息。
Hapi 和 Joi 的结合使用
Hapi 和 Joi 具有天然的结合关系,Hapi 内嵌了 Joi 校验器,可以在路由定义和请求处理中使用。接下来,我们介绍具体的使用方法。
安装和导入
首先,我们需要安装 Hapi 和 Joi:
npm install hapi @hapi/joi
然后,在我们的 JavaScript 文件中导入它们:
const Hapi = require('@hapi/hapi'); const Joi = require('@hapi/joi');
定义路由
在 Hapi 中,我们可以通过 server.route()
方法来定义路由。在路由定义中,我们可以使用 Joi 安装的一些校验规则。
例如,下面是一个使用 Joi 校验器的例子:
-- -------------------- ---- ------- -------------- ------- ------ ----- ---------------------- -------- ----- --------- -- -- - -- --- -- -------- - --------- - ------- ------------ ------- ------------------------------ --- -- -- ---
在这个例子中,我们通过 options.validate
字段配置了路由参数的校验规则。其中,params
表示路由参数,Joi.object({ ... })
返回一个对象,包含具体的校验规则。在这个例子中,我们规定了 userId
必须是整数且大于等于 1。
处理请求
在路由函数中,我们可以接收到两个参数,它们分别是请求对象 request
和响应工具 h
。我们可以使用 Joi 校验请求数据,并对校验失败的情况进行处理。
例如,下面是一个使用 Joi 校验器处理 POST 请求数据的例子:
-- -------------------- ---- ------- -------------- ------- ------- ----- ------------- -------- ----- --------- -- -- - ----- - ----- --- - - ---------------- ----- ------ - ------------ ----- ------------------------ ---- ---------------------------------- --- ----- - ------ ----- - - --------------------------------- -- ------- - ------ ------------ ------ ------------------------- ------------- - -- --- -- ---
在这个例子中,我们首先从请求 payload 中获取到 name
和 age
两个参数。然后,创建了一个 Joi 对象,并在其中规定了 name
和 age
的校验规则。最后,我们使用 schema.validate()
方法进行校验,并在校验失败时返回了一个 HTTP 400 错误。
转换请求数据
除了校验外,我们还可以使用 Joi 校验器对请求数据进行转换。例如,将字符串类型的日期转换为 JavaScript 的 Date
对象:
-- -------------------- ---- ------- ----- ------ - ------------ ----- ----------------- --- ----- - ----- - - ----------------- ----- ----------------------- --- ------------------------ -- ------ --- -- ---- -------- -------- --------
在这个例子中,我们只需要在 Joi 对象的校验规则中定义相应的数据类型和解析方法即可。
总结
通过 Hapi 和 Joi 的配合使用,我们可以方便地完成请求数据的校验和转换。在实际开发中,我们应该通过合理的表单设计和校验规则定义,保证数据的正确性和可用性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/659f9028add4f0e0ff82265d