2014-03-29 113 views
5

我正在使用貓鼬,並試圖設置一個自定義驗證,告訴屬性應該是必需的(即不是空的),如果另一個屬性值設置爲某事。我使用下面的代碼:貓鼬條件需要驗證

thing: { 
type: String, 
validate: [ 
    function validator(val) { 
     return this.type === 'other' && val === ''; 
    }, '{PATH} is required' 
]} 
  • 如果我保存{"type":"other", "thing":""}它正確失敗的典範。
  • 如果我使用{"type":"other", "thing": undefined}{"type":"other", "thing": null}{"type":"other"}保存模型,則永不執行驗證功能,並將「無效」數據寫入數據庫。

回答

0

嘗試將此驗證添加到type屬性,然後相應地調整驗證。例如: -

function validator(val) { 
    val === 'other' && this.thing === ''; 
} 
4

無論出於何種原因,貓鼬設計師決定,如果一個字段的值是null,使有條件的必需驗證不方便定製驗證不應該被考慮。我發現解決這個問題的最簡單方法是使用一個非常獨特的默認值,我認爲它是「像null」一樣。

var LIKE_NULL = '13d2aeca-54e8-4d37-9127-6459331ed76d'; 

var conditionalRequire = { 
    validator: function (value) { 
    return this.type === 'other' && val === LIKE_NULL; 
    }, 
    msg: 'Some message', 
}; 

var Model = mongoose.Schema({ 
    type: { type: String }, 
    someField: { type: String, default: LIKE_NULL, validate: conditionalRequire }, 
}); 

// Under no condition should the "like null" value actually get persisted 
Model.pre("save", function (next) { 
    if (this.someField == LIKE_NULL) this.someField = null; 

    next() 
}); 

一個完整的黑客,但它迄今爲止工作。

+0

這是唯一的解決辦法前獴3.9.1 –