验证失败但在 Simple-Schema 中插入成功
Validation fails but insertion succeeds in Simple-Schema
所以我正在使用 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"},]
}
}
本质上,我有一个包含一些字段的对象数组的子模式。记录 inserts 非常好,没有返回错误,格式正确,但验证失败。知道为什么吗?
好的,事实证明关键是它如何成功插入。 Collection 在插入之前自动调用文档上的 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"类型,然后在指定数组的子模式中,将字段指定为数组,然后用$
指示数组元素的类型子架构
所以我正在使用 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"},]
}
}
本质上,我有一个包含一些字段的对象数组的子模式。记录 inserts 非常好,没有返回错误,格式正确,但验证失败。知道为什么吗?
好的,事实证明关键是它如何成功插入。 Collection 在插入之前自动调用文档上的 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"类型,然后在指定数组的子模式中,将字段指定为数组,然后用$
指示数组元素的类型子架构