express-validator 6.15.0 版本验证链(Validation Chain)API详解
express-validator 项目地址: https://gitcode.com/gh_mirrors/exp/express-validator
express-validator 是一个强大的 Express 中间件,用于验证和清理请求数据。其中验证链(Validation Chain)是其核心功能之一,本文将深入解析验证链的API及其使用方法。
验证链基础概念
验证链本质上是一个中间件,应该传递给 Express 的路由处理程序。它的主要特点包括:
- 链式调用:可以在一个链上添加多个验证器和清理器
- 顺序执行:验证器和清理器按照添加顺序执行
- 可变性:每次调用方法都会向同一个链添加新行为
// 基础示例
app.post('/user', [
check('username').isEmail().withMessage('必须是有效的邮箱'),
check('password').isLength({ min: 6 })
], userController);
标准验证器
express-validator 内置了 validator.js 提供的所有标准验证方法,例如:
isInt()
- 验证是否为整数isEmail()
- 验证是否为有效邮箱contains()
- 验证是否包含特定字符串isLength()
- 验证字符串长度
这些验证器可以直接在验证链上调用,使用方式与 validator.js 一致。
清理链功能
验证链同时继承了清理链(Sanitization Chain)的所有功能,可以使用标准清理方法:
app.post('/register', [
check('email').normalizeEmail().isEmail(), // 先标准化邮箱格式再验证
check('birthdate').toDate().isBefore() // 转换为日期再验证
]);
常用清理方法包括 trim()
, toLowerCase()
, toInt()
等。
验证链特有方法
条件验证 .if()
.if()
方法允许根据条件决定是否继续验证:
check('oldPassword')
.if(check('newPassword').exists()) // 只有新密码存在时才验证旧密码
.notEmpty()
.custom((val, { req }) => val !== req.body.newPassword);
自定义验证 .custom()
添加自定义验证逻辑:
check('username').custom(async (value) => {
const user = await User.findByUsername(value);
if (user) {
throw new Error('用户名已存在');
}
});
存在性验证 .exists()
验证字段是否存在:
check('apiKey').exists({ checkNull: true, checkFalsy: true });
可选字段 .optional()
将字段标记为可选:
check('phone').optional({ checkFalsy: true }).isMobilePhone();
类型验证
.isArray()
- 验证是否为数组.isObject()
- 验证是否为对象.isString()
- 验证是否为字符串
check('tags').isArray({ min: 1, max: 5 });
其他实用方法
.bail()
- 前面验证失败则停止后续验证.not()
- 反转下一个验证器的结果.notEmpty()
- 验证值非空.withMessage()
- 自定义错误消息.run()
- 手动执行验证链
最佳实践
- 使用工厂函数:当需要重用验证逻辑时
const validateEmail = () => check('email').isEmail().normalizeEmail();
app.post('/login', validateEmail(), ...);
app.post('/register', validateEmail(), ...);
- 合理使用
.bail()
:避免不必要的验证执行
check('email')
.isEmail().bail() // 如果不是邮箱就不检查黑名单
.custom(checkBlacklist);
- 组合使用清理和验证:先清理再验证
check('price').trim().toFloat().isFloat({ min: 0 });
通过掌握这些验证链API,你可以构建出强大而灵活的请求验证逻辑,确保应用接收到的数据安全可靠。
express-validator 项目地址: https://gitcode.com/gh_mirrors/exp/express-validator
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考