2013-12-10 2 views
2

나는 항상 false를 반환하는 사용자 정의 유효성 검사 함수를 사용하는 매우 간단한 스키마를 가지고 있다고 가정 해 보겠습니다. 왜 몽구스는 빈 문서의 유효성을 검사하지 않습니까?

var MofoSchema = new mongoose.Schema({ 
    name: String 
}); 

MofoSchema.path('name').validate(function (value) { 
    console.log("I'm validating"); 
    return false; 
}, 'No pasaran'); 

mongoose.model('Mofo', MofoSchema); 

그런 다음 내 문서의 새로운 인스턴스를 생성하고 나는 그것을 확인 :

var Mofo = mongoose.model('Mofo'); 
var mofo = new Mofo({name: "Tarte flambée"}); 

mofo.validate(function(err) { 
    console.log(err); 
}); 

는 완벽한 사용자 지정 유효성 검사기 함수가 호출되고 err이 가득합니다.

하지만 지금은 데이터가없는와 같은 을이 :

var Mofo = mongoose.model('Mofo'); 
var mofo = new Mofo({}); 

mofo.validate(function(err) { 
    console.log(err); 
}); 

사용자 정의 유효성 검사기 기능은err이 정의되지 호출되지 않습니다. 왜? 몽구스가 커스텀 밸리데이터를 실행하지 않는 이유를 모르겠습니다.

이것은 의도적으로 설계된 동작입니까? 그게 버그 야? 처리 시간을 해킹해야합니까? 검증 전에 빈 데이터를 수동으로 확인해야합니까?

내가 잘못 했나요?

추신 : save으로 전화하면 사용자 정의 유효성 검사기에도 불구하고 문서가 MongoDB에 비어있게 저장됩니다.

답변

3

나는 몽구스가 기존 필드에 대해서만 유효성을 검사 할 것이라고 생각합니다.

그래서 당신을 위해 검증을

var mofo = new Mofo({name: null}); 

를 활성화하기 위해 '널 (null)'값을 사용할 수 있습니다 당신이 할 수있는

var MofoSchema = new mongoose.Schema({ 
    name: {type: String, required: true} 
}); 

MofoSchema.path('name').validate(function (value) {...}, 'no pasaran'); 
0

비어 있거나 정의되지 않은 :

var mofo = new Mofo({ name: { type: String, default: ''} }); 

이 항상 가지고 당신을 보장합니다 유효성을 트리거하는 그 키의 값 또한 스키마 정의를 읽기 쉽게 만듭니다.

관련 문제