【问题标题】:How to provide different error messages for min, max in isLength type validation under checkSchema of express-validator如何在 express-validator 的 checkSchema 下为 isLength 类型验证中的 min、max 提供不同的错误消息
【发布时间】:2020-04-13 12:16:14
【问题描述】:

我正在寻找一种解决方案,以在 express-validator 中提供不同的错误消息,其中选项可以包含多个值,例如 isLength,可以取最小值和最大值。

var validation_rules = checkSchema({
    first_name: {
        notEmpty: {
            errorMessage: 'The First Name field is required'
        },
        isString: {
            errorMessage: 'The First Name must be a string.'
        },
        isLength: {
            options: { min: 3, max: 4 }
        }
    }
});

作为我的示例,我想为最小和最大验证提供不同的错误消息。

for min - 名字必须至少为 3 个字符。

for max - 名字不得超过 50 个字符。

但是我在这里只能提供一个错误消息,它通常用于两种类型的验证。

谁能告诉我这在 express-validator checkSchema 验证中是如何实现的?

【问题讨论】:

    标签: node.js express express-validator


    【解决方案1】:

    您可以通过创建自定义验证器来实现。在此自定义验证器中,使用不同条件检查您的名字的长度,并针对每个无效条件拒绝并承诺您的错误消息。

    var validation_rules = checkSchema({
        first_name: {
            notEmpty: {
                errorMessage: 'The First Name field is required'
            },
            isString: {
                errorMessage: 'The First Name must be a string.'
            },
            custom: value => {
                if (value.length < 3) {
                 return Promise.reject("The First Name is too short")
                } else if (value.length > 4) {
                 return Promise.reject("The First Name is too long")
                }
                return Promise.resolve()
            }
        }
    });
    
    

    【讨论】:

    • 如果包(express-validator)已经提供给我们,为什么我需要创建自定义验证器?
    • express-validator 包不提供为具有不同选项(如 isLength min-max)的验证器设置不同错误消息的方法。因此,如果您想要不同的错误消息(一条用于 Min,一条用于 Max),唯一的方法是创建自定义验证器。
    【解决方案2】:

    由于某种原因,拉斯马拉的回答对我不起作用。以下在 express-validator 版本 6.10.1 中有效:

    exports.addUser = [
        checkSchema({
            first_name: {
                isLength: {
                    errorMessage: "first_name has invalid length. Send between 1 and 100 characters",
                    options: { min: 1, max: 100},
                },
                isString: {
                    errorMessage: 'first_name must be a string'
                },
            },
        }),
    ]
    

    通过长度验证,您可以覆盖 notEmpty 验证器。之后,您导入该函数并将其添加到路由器,如下所示:

    Router.post('/user', Validator.addUser, validate, Controller.addUser);
    

    Validate 是一个执行此操作的简单函数(因此您不必在控制器中执行此操作):

    exports.validate = (req, res, next) => {
        const errors = validationResult(req)
        if (errors.isEmpty()) {
          return next();
        }
        return res.status(422).send(errors.array());
    }
    

    official documentation 获得了一些代码。

    【讨论】:

      猜你喜欢
      • 2019-05-21
      • 2023-01-12
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 2013-08-12
      • 1970-01-01
      • 2013-07-11
      相关资源
      最近更新 更多