2015-12-26 75 views
0

我有一個模型,在兩個方面表現非常奇怪。奇怪的Mongoosejs模型行爲與預先掛鉤undefined和枚舉被忽略

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"] 
     }], 

然後插入成功。

除此之外,如果我將角色數組移動到模型的根部,插入也會成功。

這是前鉤的樣子

userSchema.pre("save", function(next){ 
    if(this.params.permissions.length == 0){ 

     this.params.permissions.push("luser") 
    } 
    next() 
}); 

2)枚舉(直更換permissionsroles從成功走向失敗去):忽略

對於權限我可以進入PELETE成領域和角色,我可以成功地輸入luser。

這兩種行爲對我來說似乎都有問題,因爲點1中數組結構的任何組合都可以工作,除了'角色'(在應用程序中沒有提到其他位置,其目的是讓鉤子設置該參數) 。

任何人都有任何見解,我猜這些問題是相關的,因爲我的枚舉工作在單數字符串字段中。

回答

0

好了,所以它是越野車,通過它我的意思是我的代碼和理解:

問題1)是我進入驗證。我用undefined覆蓋空數組。

問題2)枚舉(並且我懷疑其他驗證)在預保存鉤子中執行操作時被忽略。