2 回答
![?](http://img1.sycdn.imooc.com/5458478b0001f01502200220-100-100.jpg)
TA贡献1789条经验 获得超8个赞
基本上,验证器试图告诉您它认为在哪里发现了错误,并且由于它没有自定义错误字符串,因此它退回到(相当丑陋的)“元素/位置”方案。
方法一
最合理的方法是为每个字段设置自定义错误消息。看到错误消息相当重复,将它们移出验证器定义是有意义的,并且可能创建一个非常简单的“getter”函数来执行一些基本模板。然后,您的代码会变得更好一些:
const MSG_TYPE_STR = '{{field}} must be of type string.'
function getMessage(fieldName: string, msgID: string): string {
// Templating magic happens here, Regex or whatever other method you prefer
}
...
body('username')
.isString()
.withMessage(getMessage('username', MSG_TYPE_STR)
....
这样,您仍然会收到格式很好的错误消息,并且您不会一遍又一遍地复制粘贴相同的字符串
方法二
可以想象,您可以为验证错误添加后处理(即采用丑陋的输出并进行一些计算并将其转换为更好的输出)。这将是一种相当困难的方法,因为您必须将规则分解为原子检查,并且您的验证方案变得很长,但仍然需要大量工作
方法三
这与其说是一种“方法”,不如说是一种建议 - 您可以切换到不同的验证器,例如 Joi,它在错误消息周围具有更合理的默认逻辑
![?](http://img1.sycdn.imooc.com/5458471300017f3702200220-100-100.jpg)
TA贡献1798条经验 获得超7个赞
只想再提一个机会。传递给客户端的错误键码。例子:
用户名太短
这可以在客户端处理,如果您决定在某个时候为您的应用程序添加本地化,这将非常有用。您将在前端有一个键值对象,该对象根据用户选择的语言处理消息。
祝你好运!
添加回答
举报