npm包joi-yml使用教程

阅读时长 7 分钟读完

前言

前端开发中,数据校验是一个必不可少的步骤。为了简化数据校验的流程,npm上有很多优秀的数据校验的工具,其中joi-yml是一个小而精悍的包。在本文中,我们将一步步学习如何使用joi-yml。

安装

使用npm安装joi-yml非常方便。在终端中输入以下命令即可:

安装完成后,你就可以在你的项目中使用joi-yml了。

基础使用

joi-yml的主要作用是用来校验数据的。joi-yml支持的数据类型非常丰富,包括数字、字符串、日期、邮箱、手机号等等。下面我们通过一个例子来了解一下如何使用joi-yml。

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

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

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

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

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

在上面的代码中,我们首先定义了一个数据校验逻辑,在逻辑中,name字段为字符串类型,并且为必选字段;age字段为数字类型,必须为整数且必须大于等于0小于等于150;email字段为字符串类型,必须为邮箱格式;phone字段为字符串类型,必须为手机号格式。然后我们定义了一个数据对象,最后使用Joi.validate()函数进行数据校验。如果校验通过,则输出“数据校验通过”,如果校验不通过,则输出错误信息。

高级使用

除了上面的基础校验外,joi-yml还支持自定义校验规则、异步校验、多语言等高级功能。接下来我们将了解这些高级功能。

自定义校验规则

有时候我们需要校验的数据并不是简单的数据类型,而是一些复杂的数据类型。此时,我们可以通过自定义校验规则来实现校验。

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

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

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

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

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

在上面的代码中,我们定义了一个更复杂的数据校验逻辑,逻辑中data字段为一个数组类型,数组中的每个元素为一个对象类型,对象中有四个字段,分别是age、email、phone和creditCard。其中age、email、phone和creditCard当中至少一个必须填写。如果只填写一个,则可以填写其中任意一个;如果填写多个,则只需要其中的一个符合要求即可。

异步校验

有时候我们需要校验的数据可能是异步返回的,此时我们可以使用异步校验的方式。

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

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

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

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

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

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

在上面的代码中,我们定义了一个异步的校验规则,其中phone字段需要先异步校验其格式是否正确。如果格式不正确,则返回错误信息。否则返回正确的电话号码。

多语言功能

Joi-yml支持通过设置错误提示信息语言来提供国际化的支持。

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

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

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

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

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

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

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

在上面的代码中,我们定义了一个包含中文错误提示信息的校验规则,同时我们也修改了当前的语言设置,设置为中文。在校验规则代码中,我们使用Joi.addLocaleData()方法添加错误提示信息语言。在校验代码中,我们使用Joi.setLocaleData()方法设置当前使用的语言。在数据对象中,我们故意将age字段设置为字符串类型用于产生一个错误。此时Joi将会使用我们定义的中文错误提示信息“必须为整数”来提示错误。

结语

本文介绍了npm包joi-yml的基础使用和高级使用。通过本文,相信大家已经可以熟练的使用joi-yml对数据进行校验了。在使用过程中,可以灵活运用joi-yml的高级功能,满足不同的校验需求,提高开发效率。

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

纠错
反馈