在编写 Web 应用程序时,输入验证是非常重要的一环。如果您的应用程序接受的输入数据不正确,将很容易受到各种攻击,例如 XSS 或 SQL 注入等。因此,我们需要使用强大而可靠的输入验证工具来确保应用程序的安全性。在 Node.js 中,Hapi 是一种非常流行的 Web 框架,它提供了强大而简单的输入验证工具:Joi。
什么是 Joi?
Joi 是一个 Node.js 应用程序的模式描述和数据验证库。使用 Joi,您可以快速而简单地创建模式,甚至可以嵌套和组合多个模式。可以使用 Joi 通过下列方式验证数据:
- 类型
- 值
- 最小值和最大值
- 正则表达式
- 枚举
- 自定义函数
Joi 支持多种类型的验证,包括字符串,数字,日期等等。Joi 也提供了一些基本的验证程序,如果您想要验证更高级的数据,还可以编写自己的自定义验证程序。
使用 Joi 进行输入验证
在 Hapi 中,您可以使用 Joi 进行请求数据的验证。在定义路由时,您可以使用 Joi 对请求数据进行验证。例如,下面的示例使用 Joi 验证请求提供的查询参数:
-------------- ------- ------ ----- ---------- ------- - --------- - ------ ------------ ------ ------------------------ ----------- -------------------------------------------------- ---------------- ------------- - -- -------- ----------------- -- - -- ------ ------ - --- - - --
在此示例中,我们定义了一个 GET 路由,该路由接收名为 search
的查询参数。使用 Joi 验证请求时,我们调用了 Joi.object()
函数来创建一个用于验证对象的模式。在模式中,我们定义了两个字段:query
和 maxResults
,都有不同的验证规则。例如,query
字段需要是必填的字符串。要验证数字字段,我们使用 Joi.number().integer().min(1).max(100)
函数链。该函数链验证数字必须为整数,并且必须在 1 到 100 之间。如果查询参数不存在,则将使用默认值 10
。
以上的 .with()
函数链允许指定多个字段仅在同时出现时进行验证。
复杂的验证
对于更复杂的验证需求,您可以使用 Joi 中的许多函数来创建嵌套模式,组合模式和自定义验证器等。例如,下面的示例使用 Joi 验证请求提供的 JSON 正文:
-------------- ------- ------- ----- --------- ------- - -------- - ------ ----- ------- ------- ------ ------------------ -- --------- - -------- ------------ --------- ------------------------ ------ -------------------------------- -------- ------------ ------- ------------------------ ----- ------------------------ ------ ------------------------ ---- ------------------------ --- --- -- -- -------- ----------------- -- - -- -------- ------ - --- - - --
在此示例中,我们定义了一个 POST 路由,该路由接收 JSON 正文。使用 Joi.object()
函数验证请求正文时,我们定义了与用户有关的对象模式,包括用户名,电子邮件和地址。使用嵌套 Joi.object()
函数,我们定义了验证地址的对象模式。
自定义验证器
如果您需要更高级的验证,那么您可以编写自己的 Joi 验证器。例如,下面的示例中,我们编写了用于验证字符串输入是否为特定操作码的自定义 Joi 验证器:
----- --- - --------------- ----- ------------------- - ------------ ---------- ------------------------ ------------ ----------- ---------- --------- - ------- - ------ - ----- ----- ---- ------- ------------ ----------- -- -- -- --- -------------- - --------------------
在此示例中,我们定义了一个名为 operationCodeSchema
的 Joi 模式。该模式对输入进行验证,要求输入必须为四位数的字符串,并且必须是大写字母和数字的组合。还可以通过提供自定义语言设置来指定错误消息。
总结
Joi 是 Hapi 中一个非常实用的输入验证库。在编写应用程序时,您可以使用 Joi 来验证请求参数,表单数据和 JSON 正文等输入。Joi 提供了强大的验证函数和内置类型,您还可以编写自己的自定义验证程序来验证更高级的数据。在编写安全的 Node.js 应用程序时,Joi 是一个必不可少的工具。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6645aca5d3423812e43b0fd6