在开发 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 中间件进行数据校验。我们探讨了其基本用法、如何使用多个规则、如何自定义错误消息,还演示了完整的示例。希望本文对您进一步学习和使用这个优秀的中间件有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6710698e5f551281026ac702