使用 Express Validator 的简洁方法
Express 验证器是用于验证快速应用程序请求的众多 npm 包之一。
我最近express validator
在一个项目中偶然发现了一些挑战,我将在本文中分享。
注意:本文假设读者已经有一个 Express 项目,并且只想使用 实现验证
express validator
。因此,一些细节可能会被跳过。
当您访问快速验证器文档时,您会注意到示例中使用验证器的方式,如下面的代码片段所示:
// ...rest of the initial code omitted for simplicity.
const { check, validationResult } = require('express-validator')
app.post(
'/user',
[
// username must be an email
check('username').isEmail(),
// password must be at least 5 chars long
check('password').isLength({ min: 5 }),
],
(req, res) => {
// Finds the validation errors in this request and wraps them in an object with handy functions
const errors = validationResult(req)
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() })
}
User.create({
username: req.body.username,
password: req.body.password,
}).then(user => res.json(user))
}
)
查看上面的代码片段,你会注意到验证与路由定义紧密耦合。这种模式在非常简单的用例中可能还行,但当使用量扩大时,代码库的维护会变得困难,而且路由定义的可读性也会下降。
在本文中,我将展示如何使上述验证更具可读性和更易于维护。
步骤 1
创建一个名为的文件validator.js
,validator.js
我们将添加两个函数,其中一个函数将保存验证规则,而第二个函数将包含执行实际验证的函数。
将下面的代码片段复制到validator.js
const { body, validationResult } = require('express-validator')
const userValidationRules = () => {
return [
// username must be an email
body('username').isEmail(),
// password must be at least 5 chars long
body('password').isLength({ min: 5 }),
]
}
const validate = (req, res, next) => {
const errors = validationResult(req)
if (errors.isEmpty()) {
return next()
}
const extractedErrors = []
errors.array().map(err => extractedErrors.push({ [err.param]: err.msg }))
return res.status(422).json({
errors: extractedErrors,
})
}
module.exports = {
userValidationRules,
validate,
}
第 2 步
现在重写上面的初始代码片段,我们将得到:
const { userValidationRules, validate } = require('./validator.js')
app.post('/user', userValidationRules(), validate, (req, res) => {
User.create({
username: req.body.username,
password: req.body.password,
}).then(user => res.json(user))
})
现在,如果您尝试注册用户但不符合用户数据规范,则验证错误响应将如下所示:
{
"errors": [
{
"username": "username must be an email"
},
{
"password": "password must be at least 5 chars long"
},
]
}
结论
使用此方法,您可以根据需要在单独的文件中为每个路由或模块定义验证规则,然后将其与 链接起来validate middleware
。这样,代码看起来更简洁、更易读、更易于维护。
本文有很多假设,因此省略了一些细节。不过,如果您有任何疑问,请随时联系我。
express validator
您可以在官方文档网站上阅读更多内容
文章来源:https://dev.to/nedsoft/a-clean-approach-to-using-express-validator-8go本文最初发表在我的博客上