2016-08-28 4 views
0

문서의 body이 고유한지 확인하고 싶습니다. 고유하지 않은 경우 적절한 오류를 제공하십시오.document.invalidate 응답으로 빈 json을 제공합니다.

NewsSchema.pre("save", true, function (next: any, done: any) { 
    var self = this; 
    News.findOne({body: self.body}, "body", function (err: any, body: string) { 
     if(err) 
      done(err); 
     else if(body) { 
      self.invalidate("body", "the news body already exists", self.body); 
      done(new Error("the news body already exists")); 
     } 
     else { 
      next(); 
     } 
    }); 
}); 

의도적으로 중복을주는 경우 body. 빈 json으로 반환됩니다. 나는 그것이 될 것으로 예상했다 반면 :

{ 
    message: 'Validation failed', 
    name: 'ValidationError', 
    errors: 
    { 
     size: 
     { 
      message: 'the news body already exists', 
      name: 'ValidatorError', 
      path: 'body', 
      type: 'String', 
      value: 'some string' 
     } 
    } 
} 

답변

0

당신이 유효인지 아닌지 확인하기 위해 validate()를 사용해야합니다.

var self = this; //type document 
... 
self.invalidate("body", "the news body already exists", self.body); 

//use validate() to check the validity 
self.validate(function(err){ 
    console.log(err);//this will give you your expected results. 
}); 
+0

해결책을 시도했습니다. 그러나 여전히 효과가 없었습니다. 문제를 업데이트했습니다. –

+0

'pre ('save')'에서 findOne을 사용하려고합니다. 실제로 저장되기 전에도 해당 문서를 찾을 수 있습니까? 그것은 항상 그러한 문서를 제시하지 않습니다. 본문이 '고유'라고 가정합니다 –

+0

mongodb를 확인하면 복제 할 때 새 문서가 전혀 작성되지 않습니다. '유일한'본문을 주면 문서가 생성됩니다. 유일한 문제는 내가 빈 json 오류가 발생하지 않습니다. –

관련 문제