奇怪的Mongoosejs模型行为,未定义和枚举上的预挂钩被忽略

时间:2015-12-26 06:58:31

标签: node.js validation enums mongoose

我有一个在两个方面表现得非常奇怪的模型。

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点中的数组结构的任何组合都有效,除了“角色”之外' (在应用程序的其他地方没有提到,目的是钩子设置该参数)。

任何人都有任何见解,我猜这些问题是相关的,因为我的枚举工作在单个字符串字段中。

1 个答案:

答案 0 :(得分:0)

好吧这是错误的,我的意思是我的代码和理解:

问题1)我的传入验证。我用undefined覆盖了空数组。

问题2)在预保存挂钩中执行操作时,忽略枚举(我怀疑其他验证)。