【问题标题】:How to validate array input for array field using Sequelize.js and PostgreSQL?如何使用 Sequelize.js 和 PostgreSQL 验证数组字段的数组输入?
【发布时间】:2015-03-03 18:06:18
【问题描述】:

我正在使用Node.js + PostgreSQL + Sequelize.js 2.0.2。我对电话字段有以下架构定义,它可以是字符串数组,但只允许使用数字:

var User = sequelize.define("User", {
    ....
    ....
    /** Phone number
     * Multiple numbers should be registered due to
     */
    phone: {
        type: Sequelize.ARRAY(Sequelize.STRING),
        allowNull: false,
        unique: true,
        validate: {
            isNumeric: true
        }
    },
    ....
    ....
});

数字电话号码数组未通过验证。

输入[ '9252522525', '9252525555' ]

错误

{ [SequelizeValidationError: Validation error]
  name: 'SequelizeValidationError',
  message: 'Validation error',
  errors: 
   [ { message: 'Validation isNumeric failed',
       type: 'Validation error',
       path: 'phone',
       value: 'Validation isNumeric failed',
       __raw: 'Validation isNumeric failed' } ] }

但是,单值数组输入[ '9252522525' ]是成功的。是Sequelize的bug还是我错了?

[编辑]

我将验证器更改为is,但没有成功。

validate: {
    is: ["^[0-9]+$", "i"]
}

我收到以下错误。

{ [SequelizeValidationError: Validation error]
  name: 'SequelizeValidationError',
  message: 'Validation error',
  errors: 
   [ { message: 'Validation is failed',
       type: 'Validation error',
       path: 'phone',
       value: 'Validation is failed',
       __raw: 'Validation is failed' } ] }

【问题讨论】:

    标签: arrays node.js postgresql validation sequelize.js


    【解决方案1】:

    根据the Sequelize github repo issue,所有验证器都适用于数组,而不是数组的单个项目,我作为最终用户似乎不清楚。解决方法是定义自定义验证器:

    phone: {
        type: Sequelize.ARRAY(Sequelize.STRING),
        allowNull: false,
        unique: true,
        validate: {
            isValidPhoneNo: function(value) {
                if (!value) return value;
    
                var regexp = /^[0-9]+$/;
                var values = (Array.isArray(value)) ? value : [value];
    
                values.forEach(function(val) {
                    if (!regexp.test(val)) {
                        throw new Error("Number only is allowed.");
                    }
                });
                return value;
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      我想是因为phone的类型是ARRAY,而不是STRING
      isNumeric不能申请phone,我想。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-22
        • 1970-01-01
        • 2021-06-27
        • 1970-01-01
        • 2016-04-25
        • 2016-06-16
        • 2019-12-02
        • 1970-01-01
        相关资源
        最近更新 更多