Mongoose 中 “express-validator” 和 “mongoose-validator” 之间的差异
在前端开发中,表单验证是一个重要且必不可少的工作。而在 Node.js 的后端开发中,表单验证同样也是一项必备的技能。在进行表单验证时,我们通常会使用一些常用的库来简化开发流程,其中包括了 “express-validator” 和 “mongoose-validator” 这两个流行的库。
“express-validator” 和 “mongoose-validator” 这两个库在使用上有很大的不同。其中,”express-validator” 是一个基于 Express 框架的表单验证库,而 “mongoose-validator” 则是一个基于 Mongoose 框架的数据验证库。下面我们将对这两个库进行详细的介绍和比较。
一、express-validator
express-validator 是一个用于表单验证的库,它可以轻松地集成在 Express 框架中使用。它可以检查用户输入的数据并确保其格式正确。express-validator 提供了一些内置的验证规则,例如:
- isEmail()
- isNumeric()
- isInt()
- isLength()
- isMobilePhone()
此外,express-validator 还提供了自定义验证规则的功能。
以下是一个使用 express-validator 进行表单验证的示例代码:
// www.javascriptcn.com code example
const { check, validationResult } = require('express-validator')
app.post('/user', [
// Email 验证规则
check('email').isEmail(),
// Password 验证规则
check('password').isLength({ min: 5 }),
], (req, res) => {
// 检查是否有错误
const errors = validationResult(req)
if (!errors.isEmpty()) {
// 如果有错误,返回错误信息
return res.status(422).json({ errors: errors.array() })
} else {
// 如果没有错误,返回成功信息
return res.status(200).json({ message: 'Success' })
}
})这段代码首先定义了两个验证规则,一个是验证 Email 的格式是否正确,另外一个是验证密码长度是否不少于 5。当用户提交表单时,会在后端进行验证。如果验证没有通过,会返回相关的错误信息。
二、mongoose-validator
mongoose-validator 是一个数据验证库,它可以很方便的在 Mongoose 框架中使用。与 express-validator 不同,mongoose-validator 并不是专为表单验证而设计的。相反,它是用来验证在 Mongoose 模型中定义的字段的。
mongoose-validator 提供了一些内置的验证规则,例如:
- isEmail
- isMobilePhone
- isNumber
- isString
- isDate
同样,mongoose-validator 也可以提供自定义验证规则的功能。
以下是一个使用 mongoose-validator 进行数据验证的示例代码:
// www.javascriptcn.com code example
const mongoose = require('mongoose')
const validate = require('mongoose-validator')
// 创建 User 模型
const userSchema = new mongoose.Schema({
email: {
type: String,
required: true,
unique: true,
validate: validate({
validator: 'isEmail',
message: 'invalid email address',
}),
},
password: {
type: String,
required: true,
validate: [
validate({
validator: 'isLength',
arguments: [5],
message: 'Password should be at least {ARGS[0]} characters',
}),
validate({
validator: 'matches',
arguments: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d@$!%*?&]{5,}$/,
message: 'Password should contain at least one lowercase letter, one uppercase letter, one digit and one special character',
}),
],
},
})
// 导出 User 模型
module.exports = mongoose.model('User', userSchema)在这个例子中,User 模型有两个字段,email 和 password。email 字段需要是一个有效的电子邮件地址,而 password 字段需要包含至少一个小写字母,一个大写字母,一个数字和一个特殊字符,并且长度需要不少于 5 个字符。如果密码验证失败,它将返回一条错误消息。
三、两者的差异
通过上面的两个例子,我们可以看出,express-validator 和 mongoose-validator 在实现上有很大的不同:
- 使用范围不同:express-validator 可以检查与表单相关的数据,而 mongoose-validator 可以验证 Mongoose 模型中的数据。
- 应用方式不同:express-validator 在 Express 框架中使用,而 mongoose-validator 在 Mongoose 中使用。
- 验证规则不同:虽然两个库都提供了一些内置的验证规则,但这些规则却存在不同之处。例如,express-validator 中提供了 isInt() 验证规则,但是 mongoose-validator 中就没有这个规则。
- 对结果的处理方式不同:express-validator 的结果是一个错误数组,而 mongoose-validator 的结果则是一个布尔值。
四、如何选择
两个库的使用方式和验证规则有所不同,这使得它们在不同的情况下有各自的优势。在选择哪个库时,需要考虑到应用程序的需求和特点。
如果你使用的是 Mongoose ,并且需要验证数据模型的字段,那么使用 mongoose-validator 就是一个不错的选择。它与 Mongoose 的集成很方便,并且提供了许多内置的验证规则,以及定制规则的方法。
如果你需要进行表单验证,并且使用 Express 框架,那么就应该选择 express-validator。它提供了一些常用的验证规则,也可以轻松地定义自定义规则。此外,它的错误处理和结果分析都很方便。
在实际的应用中,我们也可以根据自己的具体应用场景灵活选择。比较理想的做法是,如果自己的应用使用的是 Mongoose,可以使用 mongoose-validator, 否则使用 express-validator 更加方便。
总之,无论选择哪个库,都需要根据具体的情况进行参考。在学习的时候,同时学习两个库也是不错的选择,掌握多种方法可以帮助我们更好地应对各种需求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d09438e46428fe9edb58ff