2016-03-20 5 views
0

ここに私のマングース用のカスタムバリデーターがあります。 1つのフィールドに対して複数の検証を行うより便利な方法はありますか?それは動作しますが、私はそれが最良の方法ではないと思います。ネイティブマングースバリデーターを使って複数のバリデーションをしようとする私の試みはすべてクラッシュします。mongoose one field multiple validation

 schema.pre('save', function(callback) { 
     var self = this; 

     function nameLength(){ 
      var Regex1 = /^.{4,12}$/; 
      if (Regex1.test(self.username)=== false){ 
       return(" Username must be between 4 and 12 characters long"); 
      }else{ 
       return(0); 
      } 
     } 

     function nameSymbols() { 
      var Regex1 = /^[A-Za-z0-9]+$/; 
      if (Regex1.test(self.username) === false) { 
       return (" Only roman letters and numbers can be used"); 
      } else { 
       return (0); 
      } 
     } 

     function passwordLength(){ 
      var Regex1 = /^.{8,50}$/; 
      if (Regex1.test(self.password)=== false){ 
       return("Password must be between 8 and 50 characters long"); 
      }else{ 
       return(0); 
      } 
     } 


     var f1 = nameLength(); 
     var f2 = nameSymbols(); 
     var f3 = passwordLength(); 


     var val = {}; 
     val.checkUsername = [f1, f2].filter(function(string){return string}); 
     val.checkPassword = [f3].filter(function(string){return string}); 




     if(val.checkUsername.length == 0){ 
      delete val.checkUsername 
     }else if((val.checkPassword.length == 0)){ 
      delete val.checkPassword 
     }; 



     for(var key in val){ 
      console.log(key); 
      if(key){ 
       var err = new RegError(val); 
       callback(err); 
      }else{ 
       callback(); 
      } 
     } 

    }); 

答えて

0

あなたのやりたいことに基づいて、あなたのアプローチはうまくいきます。私が作る唯一の調整は、スタイルに関連しているでしょう(それはもっと軽いかもしれません)。ユーザー名が正しい

場合は、パスワードルールをチェックれることは決してありません:

しかし、際立っているあなたのコードに問題があります。したがって、たとえパスワードがcorectであっても、パスワードはあなたのコールバックをエラーで呼び出すでしょう。

if (val.checkUsername.length == 0) { 
    delete val.checkUsername 
} 
if ((val.checkPassword.length == 0)) { 
    delete val.checkPassword 
} 
+0

はい、これは私の省略です。ありがとうございました! –