如何在 Express.js 中进行数据验证和过滤

阅读时长 6 分钟读完

在开发 Web 应用程序时,处理用户提交的数据是非常重要的一步。数据验证和过滤是确保数据的完整性和安全性的关键。在本文中,我们将讨论如何在 Express.js 中进行数据验证和过滤。

为什么需要数据验证和过滤

当用户提交数据时,我们不能保证他们会按照我们的期望进行输入。他们可能会输入无效的数据,如空值,非法字符或不正确的格式。如果我们不对这些数据进行验证和过滤,我们的应用程序可能会出现意外行为,如崩溃或安全漏洞。

数据验证和过滤可以防止这些情况的发生。它可以确保我们的应用程序接收到正确的数据,并且可以处理它们。

数据验证

在 Express.js 中,我们可以使用 express-validator 库来进行数据验证。该库提供了一组强大的验证器和过滤器,可以轻松地验证和过滤表单数据。

安装 express-validator

要使用 express-validator,我们需要先安装它。可以使用 npm 安装:

基本用法

在 Express.js 中,我们可以使用中间件来处理请求。在处理表单数据之前,我们可以使用 express-validator 中间件来验证和过滤数据。

以下是一个简单的示例:

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

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

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

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

在上面的示例中,我们在'/register'路由中使用了 express-validator 中间件。我们定义了两个验证器,一个用于验证电子邮件地址,另一个用于验证密码。如果验证失败,我们将返回一个带有错误消息的 422 状态码。否则,我们将处理有效的数据。

验证器

express-validator 提供了多个验证器,可以检查数据是否符合特定的要求。以下是一些常见的验证器:

  • isEmail() - 检查字符串是否是有效的电子邮件地址
  • isURL() - 检查字符串是否是有效的 URL
  • isNumeric() - 检查字符串是否只包含数字
  • isLength() - 检查字符串的长度是否在指定范围内
  • isIn() - 检查值是否包含在指定的数组中
  • isInt() - 检查字符串是否是整数

这只是一些常见的验证器的示例。express-validator 还提供了许多其他验证器,可以满足各种需求。

过滤器

除了验证器之外,express-validator 还提供了过滤器。过滤器可以对输入数据进行修改或清理。以下是一些常见的过滤器:

  • trim() - 删除字符串两端的空白字符
  • escape() - 转义字符串中的 HTML 实体
  • toDate() - 将字符串转换为日期对象
  • toInt() - 将字符串转换为整数

错误处理

当验证失败时,express-validator 会返回一个包含错误消息的对象。我们可以使用 validationResult() 函数来访问这些错误消息。以下是一个示例:

在上面的示例中,我们将错误消息作为 JSON 对象返回。您可以根据需要自定义错误处理逻辑。

数据过滤

在处理表单数据时,我们可能需要对数据进行清洗和转换。例如,我们可能需要删除多余的空格,将字符串转换为小写,或将字符串转换为日期对象。在 Express.js 中,我们可以使用 express-sanitizer 库来进行数据过滤。

安装 express-sanitizer

要使用 express-sanitizer,我们需要先安装它。可以使用 npm 安装:

基本用法

在 Express.js 中,我们可以使用中间件来处理请求。在处理表单数据之前,我们可以使用 express-sanitizer 中间件来过滤数据。

以下是一个简单的示例:

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

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

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

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

在上面的示例中,我们在'/register'路由中使用了 express-sanitizer 中间件。我们定义了两个验证器,一个用于验证电子邮件地址,另一个用于验证密码。如果验证失败,我们将返回一个带有错误消息的 422 状态码。否则,我们将清洗数据并进行处理。

错误处理

由于 express-sanitizer 只是一个过滤器,因此不会产生错误。如果您使用了 express-validator,那么您可以使用与前面示例相同的错误处理方法。

结论

在本文中,我们讨论了如何在 Express.js 中进行数据验证和过滤。我们介绍了 express-validator 和 express-sanitizer 库,并提供了示例代码。通过使用这些库,我们可以确保我们的应用程序接收到正确的数据,并且可以处理它们。

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

纠错
反馈