如何使用Sequelize.js和PostgreSQLvalidation数组字段的数组input?
我使用Node.js + PostgreSQL + Sequelize.js 2.0.2 。 我有以下模式定义的电话字段可能是string数组,但只允许数字:
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 } }, .... .... });
数字电话号码数组未通过validation。
input : [ '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' } ] }
但是,单值数组input[ '9252522525' ]
是成功的。 是Sequelize的bug还是我错了?
[编辑]
我改变了validation器,但没有成功。
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' } ] }
根据Sequelize github回购问题 ,所有的validation器都适用于数组,而不是数组中的单个项目,这对于我来说似乎不是最终用户。 解决方法是定义自定义validation器:
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; } } }
我认为,因为phone
types是ARRAY
,而不是STRING
。
isNumeric
不能应用于phone
,我想。