2016-07-17 4 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" 

지금 내가 확인 해요? 내가 단추를 처음 클릭 제출하면

가 (사용자가해야 존재)

의는 "데데"로그인을 가진 사용자를 등록하려고하자, 콘솔 보여줍니다 Users exists -> 글쎄, 그건 좋은입니다.

문제는 내가이 (가)

다음을 console.log 나에게 두 개의 메시지

User does not exist 
User exists 

하고 무슨 일이 안 새 사용자를 추가 할 수 표시 (웹 페이지 새로 고침없이) 두 번째로 제출 클릭 할 때입니다 끝내라. 구독 함수가 모든 행에서 두 번째로 반복되는 이유는 무엇입니까? 그것을 고치는 방법?

답변

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

관련 문제