【问题标题】:Get params inside custom validator in mongoose在猫鼬的自定义验证器中获取参数
【发布时间】:2020-07-21 19:40:22
【问题描述】:

在我的express + mongo 应用程序中,我将mongoose 用于数据库架构。

对于架构,我需要一个自定义验证器说“用于检查长度是否为 x”

下面是我的包含自定义验证器的架构

var schema = new Schema({
    ...,
    contactNumber: {
        type: Number,
        validate: [
            {
                validator: hasLength,
                message: "Contact number must be 10 digits",
                length: 10
            }
        ]
    },
    ...
}

以下是自定义验证器功能:

function hasLength(str, length) {
    let pattern = "^d{" + length + "}$";
    let regex = new RegExp(pattern, 'g');

    return regex.test(str);
}

在这个验证器函数中,我想从上述架构中访问length 参数。

我知道这个功能代码不能正常工作。所以我需要有人帮助我如何在验证器函数中访问该长度变量。

我们将非常感谢您的帮助 :)

【问题讨论】:

    标签: javascript node.js validation mongoose


    【解决方案1】:

    可能是这样的:

    var schema = new Schema({
        ...,
        contactNumber: {
            type: Number,
            validate: [
                {
                    validator: hasLength(10),
                    message: "Contact number must be 10 digits",
                }
            ]
        },
        ...
    }
    
    const hasLength = length => str => {
       let pattern = "^d{" + length + "}$";
       let regex = new RegExp(pattern, 'g');
    
       return regex.test(str);
    }
    

    【讨论】:

    • 您可以(应该?)为此使用 built-in 验证器。
    • mongoose 没有这样的内置验证器,我也想研究如何创建这样的自定义验证器。我会试试你的代码,然后告诉你结果。
    • @SherinJose 你错了,他们对数字模式有 min 和 max,对字符串模式有 minLength 和 maxLength 验证器。
    • 数字的min和max不是数位数,是最大数和最小数。
    • 我已经检查了您的代码,它对我来说运行良好。谢谢@Adam
    猜你喜欢
    • 2017-05-03
    • 2021-06-20
    • 2016-09-23
    • 2015-07-29
    • 2016-03-13
    • 2014-07-08
    • 1970-01-01
    • 2015-09-05
    相关资源
    最近更新 更多