node.js - express-validator - 自定义错误输出
问题描述
我正在使用快速验证器来验证 json 正文。
路由器
router.post('/login', [
body('mobno')
.exists().withMessage('Required')
.isLength({ min: 10, max: 12 }).withMessage('10-12 characters')
.isNumeric().withMessage('Numeric'),
body('password')
.not().isEmpty().withMessage('Password is required'),
], async (req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.json({ errors: errors.array(), success: false, msg: 'Check Parameters' });
}
// do stuff and respond
});
回复
{
"errors": [
{
"value": "998716***658()",
"msg": "10-12 characters",
"param": "mobno",
"location": "body"
},
{
"value": "998716***658()",
"msg": "Numeric",
"param": "mobno",
"location": "body"
}
],
"success": false,
"msg": "Check Parameters"
}
在前端,我使用的是 Vuetify,因此我需要采用前端可以轻松使用的格式。
预期产出
{
"errors": {
"mobno": [
"10-12 characters",
"Numeric"
]
},
"success": false,
"msg": "Check Parameters"
}
问题
- 是否有任何我可以挂钩的选项/功能可以
errors
按照我想要的方式格式化。 - 我正在考虑使用 Lodash 进行这种转换,关于如何实现这一点的任何建议?
解决方案
您可以使用 lodash 链按 对错误进行分组param
,然后将每个组中的项目映射到msg
属性。然后,您可以errors
使用对象扩展将对象与先前的结果结合起来。
const data = {"errors":[{"value":"998716***658()","msg":"10-12 characters","param":"mobno","location":"body"},{"value":"998716***658()","msg":"Numeric","param":"mobno","location":"body"}],"success":false,"msg":"Check Parameters"}
const errors = _(data.errors)
.groupBy('param')
.mapValues(group => _.map(group, 'msg'))
.value()
const result = {
...data,
errors
}
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.14/lodash.js"></script>
以及使用 lodash/fp 和的管道方法_.flow()
:
const { flow, groupBy, mapValues, map } = _
const transform = flow(
groupBy('param'),
mapValues(map('msg'))
)
const data = {"errors":[{"value":"998716***658()","msg":"10-12 characters","param":"mobno","location":"body"},{"value":"998716***658()","msg":"Numeric","param":"mobno","location":"body"}],"success":false,"msg":"Check Parameters"}
const result = {
...data,
errors: transform(data.errors)
}
console.log(result)
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>
推荐阅读
- python - OSError: [WinError 123] 文件名、目录名或卷标语法不正确(尝试从驱动器访问图像数据集时出错)
- java - Apache flink 对 watermark 空闲的理解以及与 Bounded duration 和 window duration 的关系
- kubernetes - 自动将 Pod 移动到另一个节点
- hive - 如何在 ubuntu 上使用 java 将 jdbc 配置为 hive?
- performance - 返回范围 [a,b] 中所有素数的计数,使得所有数字都来自集合 {1,5,9} 。1<=a<=b<=10⁹
- python - 在数据框中添加除某个字符串之外的值
- python - 将行值与 id 部分中的 nan 组合(熊猫)
- javascript - NodeJS 调度(启动/停止)多个任务
- formula - catia 公式中的规则编辑器语法错误
- android - 如何从 Android Studio 中的本地库中排除依赖项