Express.js 中的数据校验:使用 Express-validator

阅读时长 9 分钟读完

在开发 Web 应用程序时,数据校验是一个重要的问题。如果我们不对输入进行验证,可能会导致一些安全漏洞,不正确的数据也可能会导致程序崩溃。在 Node.js 的 Express.js 框架中,我们可以使用 Express-validator 中间件来对我们的输入进行校验。本文将详细介绍如何使用 Express-validator 进行数据校验。

安装和配置

首先,我们需要在项目中安装 Express-validator:

然后,在我们的 Express.js 应用程序中引入它:

在这里,我们不仅引入了 Express-validator 模块,还引入了 bodyvalidationResult

接着,我们定义了 app.use() 方法来解析请求体。我们使用 express.urlencoded() 解析 URL 编码数据,并使用 express.json() 解析 JSON 数据。这是我们使用 Express-validator 必须要做的。

基本用法

现在我们已经完成了安装和基本的配置,让我们来看一下如何使用 Express-validator 进行数据校验。

假设我们有一个注册页面,用户需要提供一个用户名和一个密码,我们需要校验这两个字段的有效性。我们可以这样写:

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

首先,我们使用 app.post() 定义了一个路由,这个路由处理 POST 请求,并且路径为 /register

接着,我们将一个数组传递给 app.post(),这个数组中包含了两个校验规则:

  • body('username').isLength({ min: 5 }):要求 username 的值必须至少包含 5 个字符。
  • body('password').isLength({ min: 8 }):要求 password 的值必须至少包含 8 个字符。

最后,我们编写了一个回调函数用于接收 POST 请求并返回响应。在回调函数内,我们可以使用 validationResult() 来收集验证规则返回的数组,从而检查是否有任何错误。

如果我们使用了 isLength() 规则之外的一些其他规则,可以在验证规则的末尾使用 .withMessage() 方法指定一个自定义错误消息:

使用多个规则

在实际开发中,很难只使用一个验证规则去检测数据。我们可能需要使用多个规则来检查一个字段是否合法。比如,对于密码,我们可能需要检查它是否包含大写字母,小写字母,数字和特殊字符。我们可以这样写:

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

在这个例子中,我们对密码字段使用了了多个规则。我们还使用了 .matches() 方法来确保密码字段满足我们所需的模式。

自定义错误消息

在使用多个验证规则时,如果每个规则都使用了 .withMessage(),我们可能会看到许多重复的代码。为了避免这种情况,我们可以使用 check() 方法。

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

在这个例子中,我们还使用了 .custom() 方法。这个方法允许我们编写一个函数来验证字段,并返回一个布尔值或一个 Promise 对象。如果验证失败,可以直接抛出一个错误。

我们还可以使用 .withMessage() 来指定自定义错误消息:

完整的示例

下面是一个完整的示例,它演示了如何使用 Express-validator 进行数据校验:

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

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

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

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

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

结论

在本篇文章中,我们学习了如何使用 Express-validator 中间件进行数据校验。我们探讨了其基本用法、如何使用多个规则、如何自定义错误消息,还演示了完整的示例。希望本文对您进一步学习和使用这个优秀的中间件有所帮助。

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

纠错
反馈