风帆/水线是否提供声明方式来强制我的模型中的数组元素是字符串类型?或者我必须编写代码来执行此验证?风帆/水线中的字符串数组模型w /数组字符串
1
A
回答
1
据我所知,在模型声明中没有办法做到这一点。但是,您可以在“beforeValidate”回调中轻松完成。
如果您在代码段here的注释中注明,将任何内容传递给生命周期回调中的回调将触发错误,因此只需要这一小段代码即可验证数组仅包含字符串:
beforeValidate: function (values, cb) {
values.arrOfStrings.forEach(function(str) {
if (typeof(str) != "string") {
cb("err: arrOfStrings must contain only strings");
}
}
cb()
}
2
看来,这可以通过添加自定义类型的模型(Waterline readme描述)来完成:需要
module.exports = {
types: {
stringArray: function(array){
if (!Array.isArray(array)) {
return false;
} else {
return array.every(function (value) {
return typeof(value) === "string"
});
}
}
},
attributes: {
someArrayOfStrings : {
type: 'array',
stringArray: true
}
}
};
自定义验证码,但至少这种方法适用于验证引擎并允许在模型中进行声明性验证。
+1
数组类型有点不对?每次使用时需要检查类型。 :/ – Kefka 2015-12-28 17:59:10
0
由于HolySamosa,指出(但我会在文档中末附上更详细的网页)
自定义的验证
您可以定义自己的类型及其与类型的验证目的。可以访问和比较其他属性的值。这使您可以将验证业务逻辑移入您的模型并从您的控制器逻辑中移出。
var User = Waterline.Collection.extend({
types: {
point: function(latlng){
return latlng.x && latlng.y
},
password: function(password) {
return password === this.passwordConfirmation;
});
},
attributes: {
firstName: {
type: 'string',
required: true,
minLength: 5,
maxLength: 15
},
location: {
type: 'json',
point: true
},
password: {
type: 'string',
password: true
},
passwordConfirmation: {
type: 'string'
}
}
});
,以便在上面的例子中,你可以使用HolySamosa的功能以及。使用了`forEach`是
https://github.com/balderdashy/waterline-docs/blob/master/models/validations.md
相关问题
- 1. 风帆/水线模型帮助 - 如何存储可能是数组,json或字符串的数据?
- 2. 字符串数组中的字符串
- 3. 反向字符串数组w /方法
- 4. 字符串的字符数组和字符数组至字符串转换
- 5. 字符串数组匹配字符串
- 6. 变换[字符串,字符串]数组
- 7. 单选字符串,字符串数组
- 8. 添加字符串,字符串数组
- 9. JSON字符串到字符串数组
- 10. 字符串数组来字谜字符串数组
- 11. 字符串数组
- 12. 字符串数组
- 13. 字符串数组
- 14. 字符串数组
- 15. 字符串数组
- 16. 字符串数组
- 17. 错误获取字符串数组字符串&字符串数组int
- 18. 无符号字符数组到宽字符数组/字符串
- 19. 字节数组字符串
- 20. 字符串字节数组
- 21. 初始化字符串数组从字符串数组资源
- 22. 字符串数组至2D字符串数组
- 23. 将字符串数组转换为字符串数组
- 24. 用其他字符串数组替换字符串数组?
- 25. 数组字符串不被识别为数组字符串
- 26. 转:将字符串数组转换为Json数组字符串
- 27. 确定字符串数组或字符串数组Grails
- 28. 数组[字符串]或字符串到字符串
- 29. 字符串数组中golang
- 30. 查找字符串的二维数组中的字符串数
注:这是异步,所以这些潜在的回调都将被调用。 JS引擎会继续执行forEach,调用'cb()',并且数组中的最后一项触发不等式 - 现在'cb'被调用两次。因此,如果你想让引擎停留在迭代直到完成,你可以将它重构为'for(i)'循环。 – Cody 2015-07-04 16:54:27