在Sails / Waterline中使用/数组字符串建模

时间:2014-09-22 17:31:42

标签: javascript sails.js waterline

sails / waterline是否提供了一种声明性方法来强制我的模型中数组的元素是字符串类型?或者我必须编写代码来执行此验证吗?

2 个答案:

答案 0 :(得分:3)

似乎可以通过向模型添加自定义类型(在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 :(得分:1)

据我所知,在模型声明中无法做到这一点。您可以在" beforeValidate"中轻松完成它。然而,回调。

如果你在代码片段here的注释中注意到,在生命周期回调中将任何内容传递给回调都会触发错误,所以只需要这些代码来验证数组是否只包含字符串:

beforeValidate: function (values, cb) {

  values.arrOfStrings.forEach(function(str) {
    if (typeof(str) != "string") {
      cb("err: arrOfStrings must contain only strings");
    }
  }

  cb()
}