验证失败,但插入成功



所以我使用的是Simple-Schema/Collection2,我认为我的架构定义很好,因为它们捕获了畸形的字段,并且在正确形成时,记录将其成功插入。

但是,我正在尝试运行MySchemas.Schema.validate(document)并在柴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"},]
    }
}

本质上,我有一个带有某些字段的对象的亚chema。记录插入非常好,没有返回错误,并且要正确格式化,但失败了验证。知道为什么?

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

它还事实证明,模式确实不是与Array subschemas一起播放,所以我不得不像这样重新格式化我的对象:

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

因此,而不是将字段定义为类型的" subschema",然后在指定数组的子弦中,将字段指定为数组,然后用 $表示数组元素类型subschema

最新更新