自动为Express-Validator生成的错误消息

hrp8sfH4xQ4

我想创建一个Express API并使用验证我的请求输入express-validator目前这是我的验证中间件

protected validate = async (request: Request, response: Response, next: NextFunction): Promise<void> => {
    const validationErrors: Result<ValidationError> = validationResult(request);

    if (!validationErrors.isEmpty()) {
        response.status(422).json({ errors: validationErrors.array() });
    } else {
        next();
    }
};

我的基本验证设置看起来像

public persist = [
    body('username')
        .isString()
        .withMessage('username must be of type string.')
        .isLength({ min: 1 })
        .withMessage('username must be at least one character long.')
        .exists()
        .withMessage('username is required.'),
    body('password')
        .isString()
        .withMessage('password must be of type string.')
        .isLength({ min: 1 })
        .withMessage('password must be at least one character long.')
        .exists()
        .withMessage('password is required.'),
    this.validate,
];

当我打电话POST /users创建新用户时,我收到无效输入的详细错误响应。当我删除所有自定义错误消息时,会收到此响应

[
    {
        "msg": "Invalid value",
        "param": "username",
        "location": "body"
    },
    {
        "msg": "Invalid value",
        "param": "password",
        "location": "body"
    }
]

有没有办法获取自动生成的错误消息,或者我真的必须自己编写这些错误消息吗?

亚历克斯·斯蒂芬诺夫(Alex Stepanov)

基本上,验证器试图告诉您它认为在哪里发现了错误,并且由于它没有自定义错误字符串,因此它退回到(相当丑陋的)“元素/位置”方案。

方法1

最合理的方法是为每个字段提供自定义错误消息。看到错误消息是相当重复的,将它们移出验证器定义是有意义的,并且可能会创建一个非常简单的“ 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)

....

这样,您仍然会获得格式正确的错误消息,并且不会一遍又一遍地复制粘贴相同的字符串

方法2

您可以想像地将后处理添加到验证错误中(即,获取难看的输出并进行一些计算,然后将其转换为更好的输出)。这将是一个相当困难的方法,因为您必须将规则分解为原子检查,并且验证方案变得很长,但这仍然是一个相当大的工作

方法3

这并不是建议,而是“办法”-您可以切换到其他验证器,例如Joi,该验证器在错误消息周围具有更合理的默认逻辑

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Nodejs调试-自动生成错误消息

来自分类Dev

每个字段仅显示 1 条错误消息 Express-validator

来自分类Dev

PHP无法为空字段生成错误消息

来自分类Dev

如何自动生成提交消息

来自分类Dev

ember在第1行上生成解析错误:{{#每个消息为| message |}}

来自分类Dev

为数据库表中的重复输入或输出生成错误消息

来自分类Dev

自动为精灵图标生成LESS样式

来自分类Dev

自动为Flyway生成迁移SQL

来自分类Dev

Kotlin如何自动为JVM生成绑定?

来自分类Dev

自动生成的值设置为NULL

来自分类Dev

自动为符号生成“attr_reader”

来自分类Dev

是否为嵌套对象自动生成 ObjectId?

来自分类Dev

为列表视图自动生成项目

来自分类Dev

SQL错误-自动增量为空

来自分类Dev

Express-validator不会产生错误,即使它会产生错误

来自分类Dev

express-validator验证参数是否为数组

来自分类Dev

Laravel Validator始终显示所需的错误消息

来自分类Dev

在Laravel中编辑Validator的错误消息

来自分类Dev

.net始终显示FileUpload Validator错误消息

来自分类Dev

在Spring Validator中覆盖错误消息

来自分类Dev

为 RabbitMQ 生成的消息设置属性

来自分类Dev

如何解决Express Validator中间件错误?

来自分类Dev

为Android生成FFMPEG错误

来自分类Dev

能够自动为用户生成随机密码

来自分类Dev

如何自动为phpstorm中的类生成属性?

来自分类Dev

如何使Eclipse为新的Java类自动生成主要方法?

来自分类Dev

自动为方法的返回值生成变量

来自分类Dev

使用Jenkinsfile自动为Gradle构建生成构建管道

来自分类Dev

为什么ReactJS不自动为动态子代生成密钥?