Hapi 框架使用 joi 插件验证参数,实现数据格式校验

阅读时长 4 分钟读完

Hapi是一个Node.js Web框架,它具有扩展性和可重用组件,使它成为构建现代Web应用程序的理想工具。 Hapi确保服务器安全,并遵循标准Web安全最佳做法。

在构建Web应用程序时,验证用户输入是非常重要的。 Hapi提供了一个名为joi的插件,它使数据格式校验变得简单和可维护。

joi是什么?

joi是一个Node.js模块,它提供了一种语义化,基本上是链式的API以检查输入数据的完整性。 它作为一种验证库提供了一种易于使用,强大和严密的方式来表示任何复杂对象的约束,使代码更好地组织和结构化。joi验证模式由模式组成,并且可以嵌套其中其他模式,以构建更大的模式。

安装joi插件

在使用joi插件之前,需要确保已经安装了Hapi框架。 确认Hapi是否安装可以使用以下命令:

想要使用joi,请使用以下命令将其安装为依赖项:

验证模式

模式是验证joi对象的结构。要定义模式,请使用以下示例代码:

-- -------------------- ---- -------
----- --- - ---------------------

----- ------ - ------------
    ----- ---------------------------------------
    ---- ------------------------
    ------ -------------------- ------------------ - -------------
---

-------------- - -------

在这个例子中,我们定义了一个Joi对象,其中包含三个key:value对,每个都定义为Joi的规则。 在此代码中,我们定义了三个字段:

  • name的类型必须是字符串,长度为3到30个字符之间
  • age的类型必须是数字
  • email的类型必须是字符串,并满足传统的电子邮件格式

如果从输入数据中省略了一个key:value对,则joi将给出一个错误。 它还将验证数据的类型和格式是否与定义的规则相同。

应用程序中使用joi验证

要在应用程序中使用定义的joi对象,请使用以下示例代码:

-- -------------------- ---- -------
----- --- - ---------------------
----- ------ - -------------------- -- --------

--------------
    ------- -------
    ----- ------------
    -------- -
        --------- -
            -------- -------
            ----------- ----- --------- -- ------ -- -
                ----- ------
            -
        -
    --
    -------- ----- --------- -- -- -
        -- ------
        ------ - ---- --------- --
    -
---

在这个例子中,我们定义了一个路由与验证过程,当我们POST到路由表单中时,我们希望检查传入的数据是否符合规则。

validate选项是一个对象,它从应用程序上下文中引用joi对象。 其中,payload参数是需要验证的数据,failAction是验证失败时的处理方法,这里是抛出错误。如果没有传入正确的数据,joi将返回错误,否则它将通过验证,并且处理程序(在这种情况下,函数handler)将接收经过验证的数据。 与使用joi一样,如果我们省略任何字段,joi将返回错误。

总结

Hapi框架使用joi插件验证参数可以确保在处理用户输入时使用正确的格式和数据类型。 joi提供了一种易于使用,强大和严密的方式来表示任何复杂对象的约束。 通过使用joi提供的模式语言,我们可以实现简单而可维护的数据格式校验。

在本文中,我们介绍了如何在应用程序中使用joi插件。 我们也看到了如何定义模式以验证它表示的对象,并与应用程序的请求体一起使用验证模式。 通过这样做,我们可以在服务器端应用程序中捕获无效数据,从而避免不必要的安全问题。

如果您想深入了解joi的工作原理,官方文档是不错的起点。通过此文档,您应该已经可以开始使用joi来实现基本数据校验了。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65a78c9fadd4f0e0ff0af8ce

纠错
反馈