gpt4 book ai didi

arrays - 如何使用 Sequelize.js 和 PostgreSQL 验证数组字段的数组输入?

转载 作者:行者123 更新时间:2023-11-29 13:01:35 33 4
gpt4 key购买 nike

我正在使用 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' } ] }

最佳答案

根据 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;
}
}
}

关于arrays - 如何使用 Sequelize.js 和 PostgreSQL 验证数组字段的数组输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28669460/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com