我正在使用混合值数组在mongoose(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.
验证错误。奇怪的是,我为“功能”发送的数据运行良好,唯一的区别是我明确指定了一个模式。
从required: true
中删除services
会导致返回值中出现空数组对象。
我使用API POST请求提交数据,其中包含请求正文中的数据。我正在使用Postman提交请求,并检查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
更新
我想道歉,因为这是我的错误。我根据请求动态创建配置,并且一次将复制的服务设为null,doh!
但是,在通过required: true
验证后,自定义验证程序仍未执行。我也找不到任何关于验证器和执行顺序的文档,这些文档非常有用。以下是验证器代码段供参考:
function isValidServices(services) {
for (const service of services) {
if (typeof service.name !== 'string') return false;
}
return true;
}
答案 0 :(得分:0)
我已经尝试了各种方法并详细了解了mongoose 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"]
}
});
在此之后我的验证器功能正在执行而没有任何问题。希望这有助于某人。