所以我使用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"},]
}
}
基本上,我有一个带有一些字段的对象数组的子模式。记录插入非常好,没有返回错误,并且格式正确,但验证失败。知道为什么吗?
答案 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