2016-07-17 14 views
6

私は2つのオブジェクトを持つデータベースを持っています。それは次のようになります。ユーザーはデータベースの問題は何ですかFirebase Angularfire2データベースにユーザが存在するかどうかをチェック

constructor(private af: AngularFire) { 
    this.users = af.database.list('/users'); 
    } 

    registerUser(login: string, password: string) { 
    this.af.database.list('/users', { 
     query: { 
     orderByChild: 'login', 
     equalTo: login 
     } 
    }).subscribe(response => { 
     if(response.length === 0) { 
     console.log("User does not exist"); 
     //here i will add a user 
     } else { 
     console.log("Users exists"); 
     } 
    }) 
    } 

に存在する場合

users 
    - KEY 
     login: "xexe" 
     password: "123" 

    - KEY 
     login: "dede" 
     password: "123" 

は、今私がチェックしていますか?

私は送信ボタンを初めてクリックすると

、コンソールが表示さ(ユーザーがすべき存在する)のは、「DEDE」ログインでユーザーを登録してみましょう: Users existsは - >まあ、それは良いことです。

問題は、私は(Webページを更新せず)は、第2の時間を提出

をクリックすると、その後にconsole.logは私の二つのメッセージ

User does not exist 
User exists 

を示し、それは何がいけない、新しいユーザーを追加しています終わり。なぜ2回目のsubscribe関数がすべての行を繰り返すのですか?それを修正するには?

答えて

9

クエリを使用するのではなく、loginプロパティをKEYとして使用するようにデータを構造化できます。

{ 
    "users": { 
    "dede": { 
     "login": "dede", 
     "password": "Do not store passwords :)" 
    }, 
    "xexe": { 
     "login": "xexe" 
    } 
    } 
} 

この場所への参照を作成し、オブジェクトが存在するかどうかを確認できます。

registerUser(login: string, password: string) { 
    const user = this.af.database.object(`users/${login}`); 
    user.subscribe(data => { 
    if(data.$value !== null) { 
     console.log('User does not exist'); 
    } else { 
     console.log('User does exist'); 
    } 
    }); 
} 
+0

'if(data。$ value!= null){'の代わりに 'if(data。$ value!= null){' – alltej

+0

私はangularFire2を使用しています。このオブジェクトのチェックは機能していないようです。 – alltej

+0

私は '' const user = this.af.database.object( '' users/$ {login} ''、{{preserveSnapshot:true}} ''を ''働かせて '' data.val( ) '' – alltej

関連する問題