我有一个在两个方面表现得非常奇怪的模型。
1)预先挂钩,与一个特定领域的问题。
我的架构在其根目录中有一个带有字段的params对象。如果我将以下字段放在params对象中:
roles:[{
"type": String,
"enum": ['user', 'artist', 'promoter', 'admin']
}],
我得到了这个结果:
if(this.params.roles.length == 0){
^
TypeError: Cannot read property 'length' of undefined
但是如果我改为使用这个结构(具有不同名称和枚举的相同结构):
permissions:[{
"type": String,
"enum": ["Delete","Show","Create","Update"]
}],
然后插入成功。
此外,如果我将roles数组移动到模型的根目录中,插入也会成功。
这就是预钩子的样子(直接替换permissions
roles
从成功到失败)
userSchema.pre("save", function(next){
if(this.params.permissions.length == 0){
this.params.permissions.push("luser")
}
next()
});
2)枚举:忽略
对于权限,我可以在字段中输入PELETE,对于角色,我可以成功输入luser。
这两种行为对我来说都是错误的,因为第1点中的数组结构的任何组合都有效,除了“角色”之外' (在应用程序的其他地方没有提到,目的是钩子设置该参数)。
任何人都有任何见解,我猜这些问题是相关的,因为我的枚举工作在单个字符串字段中。
答案 0 :(得分:0)
好吧这是错误的,我的意思是我的代码和理解:
问题1)我的传入验证。我用undefined覆盖了空数组。
问题2)在预保存挂钩中执行操作时,忽略枚举(我怀疑其他验证)。