2014-03-29 15 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"}으로 모델을 저장하면 유효성 검사 기능이 실행되지 않으며 "유효하지 않은"데이터가 DB에 기록됩니다.

답변

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

:

또한 몽구스의 대화를보기 –

4

mongoose 3.9.1부터 스키마 정의의 required 매개 변수에 함수를 전달할 수 있습니다. 이것으로이 문제가 해결됩니다. 이 유일한 해결책 사전 몽구스 3.9.1입니다 https://github.com/Automattic/mongoose/issues/941

관련 문제