📅  最后修改于: 2023-12-03 15:38:21.817000             🧑  作者: Mango
express-validator 是基于 Express 的常规中间件集合的一部分。它提供了一种易于使用和灵活的机制来验证输入数据,以确保输入是有效的。它可以与任何中间件一起使用,包括 body-parser、multer、cookie-parser 等等。
使用 npm 安装 express-validator 模块:
npm install express-validator
以下是使用 express-validator 验证数据的示例:
const express = require('express');
const { body, validationResult } = require('express-validator');
const app = express();
app.use(express.json());
app.post('/signup', [
// 验证用户名长度是否大于等于5,小于15
body('username').isLength({ min: 5, max: 15 }).withMessage('用户名长度必须在5到15个字符之间'),
// 验证密码长度是否小于8,大于16
body('password').isLength({ min: 8, max: 16 }).withMessage('密码长度必须在8到16个字符之间')
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
// 保存数据
});
在上面的代码中,我们使用了 body
校验器对请求体中的数据进行验证。isLength
校验器用于验证指定字段的长度是否符合要求。如果验证不通过,则用 withMessage
方法设置错误消息,然后在中间件的最后检查所有的参数是否有错误。
如果有错误,则返回 422 状态码和一个包含错误对象的 JSON。
以下是一些更高级的用法:
您还可以编写您自己的自定义验证器来完成特定的验证任务。例如,检查电子邮件是否已存在于数据库中:
const { check } = require('express-validator');
const emailExists = () => {
return check('email').custom(async value => {
const user = await getUserByEmail(value);
if (user) {
return Promise.reject('电子邮件已被使用');
}
});
}
app.post('/signup', [
emailExists(),
// 其他验证器
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
// 保存数据
});
在上述代码中,我们定义了一个名为 emailExists
的自定义验证器,并在 check('email')
中使用它。这个验证器使用了 custom
方法,在里面编写了查询电子邮件是否已经存在于数据库中的逻辑。
您可以使用 withMessage
方法为所有的验证器使用相同的错误消息,也可以为每个验证器分别使用不同的消息。
app.post('/signup', [
emailExists().withMessage('电子邮件已被使用'),
body('username')
.isLength({ min: 5, max: 15 }).withMessage('用户名长度必须在5到15个字符之间')
.notEmpty().withMessage('用户名不能为空'),
body('password')
.isLength({ min: 8, max: 16 }).withMessage('密码长度必须在8到16个字符之间')
.notEmpty().withMessage('密码不能为空'),
// 其他验证器
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
// 保存数据
});
在上述代码中,我们针对每个验证器分别设置了错误消息,也可以使用 withMessage
方法设置所有验证器的相同错误消息。
express-validator 还提供了其他很多验证方法,可以查看 官方文档 了解更多花式验证方式。
在本文中,我们了解了如何使用 express-validator 模块并验证输入数据。它简化了数据验证的过程,使我们能够更轻松地从客户端获得有效的数据并使用它们。