在开发 Web 应用程序时,数据校验是一个重要的问题。如果我们不对输入进行验证,可能会导致一些安全漏洞,不正确的数据也可能会导致程序崩溃。在 Node.js 的 Express.js 框架中,我们可以使用 Express-validator 中间件来对我们的输入进行校验。本文将详细介绍如何使用 Express-validator 进行数据校验。
安装和配置
首先,我们需要在项目中安装 Express-validator:
npm install express-validator
然后,在我们的 Express.js 应用程序中引入它:
const express = require('express');
const { body, validationResult } = require('express-validator');
const app = express();
app.use(express.urlencoded({ extended: true }));
app.use(express.json());在这里,我们不仅引入了 Express-validator 模块,还引入了 body 和 validationResult。
接着,我们定义了 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() 方法指定一个自定义错误消息:
body('username').isLength({ min: 5 }).withMessage('用户名长度必须大于等于五个字符')使用多个规则
在实际开发中,很难只使用一个验证规则去检测数据。我们可能需要使用多个规则来检查一个字段是否合法。比如,对于密码,我们可能需要检查它是否包含大写字母,小写字母,数字和特殊字符。我们可以这样写:
-- -------------------- ---- -------
--------------------- -
--------------------------- ---- - ---
--------------------------- ---- - ---
------------------------------------------------------- ---- ------- -- ----- --- --------- ---------
------------------------------------------------------- ---- ------- -- ----- --- --------- ---------
------------------------------------------------------- ---- ------- -- ----- --- ---------
-------------------------------------- ---------------------------- ---- ------- -- ----- --- ------- -----------
-- ----- ---- -- -
----- ------ - ----------------------
-- ------------------- -
------ ---------------------- ------- -------------- ---
-
---------------------- --------------
---在这个例子中,我们对密码字段使用了了多个规则。我们还使用了 .matches() 方法来确保密码字段满足我们所需的模式。
自定义错误消息
在使用多个验证规则时,如果每个规则都使用了 .withMessage(),我们可能会看到许多重复的代码。为了避免这种情况,我们可以使用 check() 方法。
-- -------------------- ---- -------
--------------------- -
--------------------------- ---- - ---
--------------------------- ---- - ---
------------------------------- - --- -- -- -
-- ------ --- -------------------------- -
----- --- --------------- ------------ ---- --- ----- -----------
-
------ -----
--
-- ----- ---- -- -
----- ------ - ----------------------
-- ------------------- -
------ ---------------------- ------- -------------- ---
-
---------------------- --------------
---在这个例子中,我们还使用了 .custom() 方法。这个方法允许我们编写一个函数来验证字段,并返回一个布尔值或一个 Promise 对象。如果验证失败,可以直接抛出一个错误。
我们还可以使用 .withMessage() 来指定自定义错误消息:
body('password').custom((value, { req }) => {
if (value !== req.body.confirm_password) {
throw new Error('Password confirmation does not match password');
}
return true;
}).withMessage('密码和确认密码不匹配')完整的示例
下面是一个完整的示例,它演示了如何使用 Express-validator 进行数据校验:
-- -------------------- ---- -------
----- ------- - -------------------
----- - ----- ---------------- - - -----------------------------
----- --- - ----------
---------------------------- --------- ---- ----
------------------------
--------------------- -
--------------------------- ---- - ------------------------ ---- ------- -- ----- - -------------
--------------------------- ---- - ------------------------ ---- ------- -- ----- - -------------
------------------------------------------------------- ---- ------- -- ----- --- --------- ---------
------------------------------------------------------- ---- ------- -- ----- --- --------- ---------
------------------------------------------------------- ---- ------- -- ----- --- ---------
-------------------------------------- ---------------------------- ---- ------- -- ----- --- ------- ------------
------------------------------- - --- -- -- -
-- ------ --- -------------------------- -
----- --- --------------- ------------ ---- --- ----- -----------
-
------ -----
------------------------- -- --- -------
-- ----- ---- -- -
----- ------ - ----------------------
-- ------------------- -
------ ---------------------- ------- -------------- ---
-
---------------------- --------------
---
---------------- -- -- -
------------------- -- ------- -- ---- -------
---结论
在本篇文章中,我们学习了如何使用 Express-validator 中间件进行数据校验。我们探讨了其基本用法、如何使用多个规则、如何自定义错误消息,还演示了完整的示例。希望本文对您进一步学习和使用这个优秀的中间件有所帮助。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/6710698e5f551281026ac702