Hapi 中如何使用 Joi 进行输入验证

在编写 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() 函数来创建一个用于验证对象的模式。在模式中,我们定义了两个字段:querymaxResults,都有不同的验证规则。例如,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