验证失败,但插入在Simple-Schema中成功

时间:2017-03-14 20:54:34

标签: json validation simple-schema meteor-collection2

所以我使用Simple-Schema / Collection2,我认为我的模式定义很好,因为它们捕获了格式错误的字段,并且在正确形成时成功插入了记录。

但是,我正在尝试运行MySchemas.Schema.validate(document)并在chai expect()块中遇到验证错误

Error: expected [Function] to not throw 'Error' but 'ClientError: fieldOne.fieldTwo.0 is not allowed by the schema' was thrown

字段在子模式上失败。实际文件很复杂,但这里是相关的骨架。

const testSchema = new SimpleSchema({ 
        fieldOne: {
        ...,
        ...,
        fieldOne.fieldTwo: {
             type: subSchema,
        },
        ...,
    });

const subSchema = new SimpleSchema({
    fieldTwo: {
        type: Array,
    },
    "fieldTwo.$": {
        type: Object,
     }
     "fieldTwo.$.foo": {
          type: String,
     },
     ....,
};

示例对象:

{ fieldOne: {
    fieldTwo: [
        { foo: "bar"},
        { foo: "bar"},]
    }
}

基本上,我有一个带有一些字段的对象数组的子模式。记录插入非常好,没有返回错误,并且格式正确,但验证失败。知道为什么吗?

1 个答案:

答案 0 :(得分:0)

好的,事实证明,关键是插入成功的关键。在插入之前自动调用文档Schema.clean()的集合,因此它正在进行一些自动格式化工作。如果我手动调用Schema.clean(myObject),则验证成功。在github页面上查看简单模式,这是创建者意识到的,并希望在以后的版本中修复。

事实证明,模式对数组子模式有好处,所以我不得不重新格式化我的对象:

const testSchema = new SimpleSchema({ 
    fieldOne: {
    ...,
    ...,
    fieldOne.fieldTwo: {
         type: Array,
    },
    "fieldOne.fieldTwo.$": {
         type: subSchema,
     }
    ...,
});

const subSchema = new SimpleSchema({
    foo: {
      type: String,
    },
    ....,
};

因此,不是定义类型" subSchema"的字段,然后在指定数组的子模式中,将字段指定为数组,然后使用$指示数组元素是输入subSchema