Express.js 中使用 Joi 进行表单验证

阅读时长 5 分钟读完

在前端开发中,表单验证是非常重要的一环。而在后端开发中,同样需要对用户输入的数据进行验证和过滤。Express.js 是一个流行的 Node.js 框架,它提供了很多方便的工具和库,其中 Joi 是一款常用的表单验证库。

本文将介绍如何在 Express.js 中使用 Joi 进行表单验证,并且提供了相关的示例代码。本文具有深度和指导意义,适合前端及后端开发人员学习。

简介

Joi 是一个 JavaScript 对象模型验证库,它可以验证从前端传递过来的数据,并确保数据的格式和类型正确。它支持链式验证,可以在不同层级的对象中验证数据,还可以根据不同的场景定制不同的验证规则。通过使用 Joi,我们可以提高代码质量和安全性,避免一些常见的安全问题,如 XSS、CSRF 等攻击。

安装和使用

在 Express.js 中使用 Joi 验证表单数据非常容易。我们只需要先使用 npm 在我们的项目中安装 Joi:

接下来,我们需要在我们的代码中加载 Joi 并使用它来验证数据。下面是一个示例代码来演示如何在 Express.js 中使用 Joi 验证数据。

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

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

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

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

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

在上面的代码中,我们首先导入了 Joi,在验证之前也需要使用 app.use(express.json()) 中间件来解析请求的 JSON 数据。然后,我们定义了一个 loginSchema 对象,它描述了登录表单需要的数据。最后,我们在 app.post("/api/login") 中对提交的数据进行了验证,如果验证失败就返回 HTTP 400 错误。如果验证通过,就可以执行登录操作。

需要注意的是,Joi 验证库会自动处理大小写、空格和一些特殊字符,确保输入的数据符合规范。

验证规则

Joi 验证库提供了非常多的验证规则,下面列举了一些常用的规则。

字符串类型

  • min(length) - 最小长度
  • max(length) - 最大长度
  • email() - 邮箱格式
  • url() - URL 格式
  • regex(pattern) - 正则表达式匹配

数字类型

  • min(number) - 最小值
  • max(number) - 最大值
  • integer() - 整数类型
  • precision(precision) - 数字精度

日期类型

  • iso() - ISO 日期格式
  • timestamp() - 时间戳格式

数组类型

  • items(schema) - 元素对应的验证规则
  • min(length) - 最小长度
  • max(length) - 最大长度

对象类型

  • keys(schema) - 对象属性及其对应的验证规则
  • minKeys(length) - 最小属性个数
  • maxKeys(length) - 最大属性个数

通过这些验证规则,我们可以完成大部分的表单验证操作。如果需要自定义规则,可以使用 func 规则。

自定义错误信息

在使用 Joi 进行表单验证时,我们可以自定义错误信息。我们可以在验证对象的 label() 方法中指定标签,然后在 validate 方法的 options 参数中指定错误信息。

下面是一个示例代码来演示如何自定义 Joi 验证的错误信息。

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

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

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

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

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

在上面的代码中,我们首先定义了一个对象 schema 并指定了规则。我们可以使用 label() 方法为属性指定标签。接下来,我们定义了一个数据对象 data 用于验证。我们在 validate() 方法中指定 options 参数,其中 abortEarly 表示是否在第一个错误时停止验证,默认值为 true,errors 表示在返回的错误消息中添加额外的属性。在这里,我们将 wrap.label 设置为空闲去掉默认的前缀,这样错误的信息只会包含真正的标签。

最后,我们可以使用 error.details 属性输出错误信息。

结论

在本文中,我们介绍了在 Express.js 中使用 Joi 进行表单验证。我们学习了如何安装和使用 Joi,使用了一些常见的验证规则并了解了如何自定义错误信息。

这样,我们可以通过使用 Joi 验证库,简单高效地验证用户输入的数据,从而提高应用的安全性和代码质量。

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

纠错
反馈