2015-10-13 69 views
0

如何在Mongoose路徑上執行validate,但返回更詳細的錯誤消息?在下面的例子中,我想返回四個可能的錯誤。雖然我他們登錄到控制檯,我寧願把他們送回作爲一個錯誤,而不是簡單的「無效的文件大小」:詳細Mongoose驗證錯誤?

schema.path('size').validate(function (size) { 

    if (typeof size == 'undefined' || size == null) { console.log('no size supplied'); return false; } 
    if (typeof size != 'number') { console.log('size not a number'); return false; } 
    if (size < 0) { console.log('size is negative'); return false; } 
    if (Math.floor(size) != Number(size)) { console.log('size is decimal'); return false; } 

    return true; 

}, 'Invalid file size'); 

回答

1

您可以鏈接多個在同一路徑上validate電話,給他們他們的每一個自己的錯誤信息:

schema.path('size') 
    .validate(function (size) { 
     return !(typeof size == 'undefined' || size == null); 
    }, 'no size supplied') 
    .validate(function (size) { 
     return (typeof size == 'number'); 
    }, 'size not a number') 
    .validate(function (size) { 
     return (size >= 0); 
    }, 'size is negative') 
    .validate(function (size) { 
     return (Math.floor(size) == Number(size)); 
    }, 'size is decimal'); 
+0

很酷!但是,隨後的評估應該在「true」還是「false」上失敗?例如,當'typeof size =='number''時,你會返回錯誤「size not a number」。 –

+0

驗證失敗由返回false的函數指示。我顛倒了你的每個布爾檢查來做這個例子。所以如果'typeof size =='number''返回'false',那麼'size'不是一個數字,你會得到「大小不是數字」驗證失敗。 – JohnnyHK

+0

啊,你說得對。對於第一個項目的雙重否定向我扔了一個循環。愛鏈接。 :) –