TL; DR:如何在一个案例中创建自定义类型字段(并运行子文档的验证),而在其他情况下不需要(没有子文档验证)?
我有一个adress
模式和使用此模式的模型(下面的代码)。
在一种情况下,它是必需的,而在另一种情况下则不是。那么如何正确验证address
?如果需要此字段,则应该要求除“公寓”以外的所有字段,如果不需要,则可以为空或有效(对于索引案例)。
对于这种情况,是否有一些选项可以将一些选项传递给子模式,还是应该在每个模型中创建自定义验证器?
// adress SCHEMA
module.exports = mongoose.Schema({
town: String,
index: {
type: String,
validate: {
validator: function (v) {
return /^\d+$/.test(v)
},
message: 'Invalid index'
}
},
district: String,
street: String,
house: String,
apartment: String
})
// user.js
const Address = require('./address')
const mongoose = require('mongoose')
const userSchema = mongoose.Schema({
address: {
type: Address,
required: true // Adress required here
}
})
module.exports = mongoose.model('User', userSchema)
// other.js
const Address = require('./address')
const mongoose = require('mongoose')
const otherSchema = mongoose.Schema({
address: Address // but not here
})
module.exports = mongoose.model('Other', otherSchema)
答案 0 :(得分:0)
要使除公寓之外的所有字段都必需,您只需使用所需的属性,就像使用地址一样:
town: {type: String, required: true},
district: {type: String, required: true},
street: {type: String, required: true},
house: {type: String, required: true},
apartment: String
如果其中一个必填字段为空,则在使用create方法时会出错,可以处理错误以将用户返回/保留在表单页面上并显示错误消息以通知他们需要填写必填字段
至于验证,您可以查看官方mongoose文档的this page,看看内置验证器是否足以满足您的需要,或者您是否需要在某些字段上使用自定义验证器。