使用混合数组 [{ }] 时的猫鼬架构验证问题



我正在猫鼬(v4.13.8)中构建一个具有混合值数组的模式。我想出了以下模式:

var deviceConfigSchema = new mongoose.Schema({
capabilities: {
type: [capabilitySchema],
required: true,
validator: [isValidCapabilities, "Not a valid capability array"]
},
services: {
type: [{}],
required: true,
validator: [isValidServices, "Not a valid service array"]
}
});

问题是我收到一个验证错误,说当我尝试提交数据时services: Path 'services' is required.。奇怪的是,我为"功能"发送的数据工作正常,唯一的区别是我显式指定了架构。

services中删除required: true会导致返回值中存在空数组对象。

我使用 API POST 请求提交数据,数据在请求正文中。我正在使用邮递员提交请求,并检查x-www-form-urlencoded。这是从正文键值输入中复制的

capabilities[0][field_map][field]:pressure
capabilities[0][field_map][type]:float
capabilities[0][field_map][format]:hPa
services[0][name]:rest
services[0][receive][0][capability_id]:0
services[0][receive][0][path]:/api/relay/0

更新:

我想道歉,因为这是我的错误。我根据请求动态创建配置,并且复制的服务一度被设为空,doh!

但是,在通过required: true验证后,自定义验证程序仍未执行。我也找不到任何关于验证器和执行顺序的文档,这将非常有用。以下是验证器代码段供参考:

function isValidServices(services) {
for (const service of services) {
if (typeof service.name !== 'string') return false;
}
return true;
}

在尝试了各种方法并更详细地查看了猫鼬 API 文档之后,我发现模式也有一个validate选项。 http://mongoosejs.com/docs/api.html#schematype_SchemaType-validate

从这里更改了我的架构:

var deviceConfigSchema = new mongoose.Schema({
capabilities: {
type: [capabilitySchema],
required: true,
validator: [isValidCapabilities, "Not a valid capability array"]
},
services: {
type: [{}],
required: true,
validator: [isValidServices, "Not a valid service array"]
}
});

对此[注意validate而不是validator]...

var deviceConfigSchema = new mongoose.Schema({
capabilities: {
type: [capabilitySchema],
required: true,
validate: [isValidCapabilities, "Not a valid capability array"]
},
services: {
type: [{}],
required: true,
validate: [isValidServices, "Not a valid service array"]
}
});

在此之后,我的验证器函数被执行了,没有任何问题。希望这对某人有所帮助。

最新更新