2016-07-17 23 views
6

2 nesneye sahip bir veritabanım var. Bu şuna benzer: kullanıcı veritabanı sorun nedirFirebase Angularfire2 Kullanıcının veritabanında mevcut olup olmadığını kontrol etme

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"); 
     } 
    }) 
    } 

bulunuyorsa

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

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

Şimdi kontrol ediyorum? Ben düğmesi ilk kez bir tıklayın gönderdiğinizde

(kullanıcı gerektiği var)

yönettiği "dede" isime sahip bir kullanıcı kaydı deneyelim, konsol gösterilmektedir: Users exists -> iyi, bu iyi.

Sorun

Sonra console.log bana iki mesaj

User does not exist 
User exists 

ve bunun ne etmemelidir yeni bir kullanıcı eklersiniz gösterir (web sayfasını yenilemeden) ikinci kez göndermek tıkladığınızda ise yapıldı. Neden abone fonksiyonu ikinci kez her satırda yinelenir? Nasıl düzeltilir?

cevap

9

Bir sorguyu kullanmak yerine,özelliğini KEY olarak kullanmak üzere verilerinizi yapılandırabilirsiniz.

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

Artık bu konum için bir başvuru oluşturabilir ve nesnenin var olup olmadığını kontrol edebilirsiniz.

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

Eğer "if (data. $ Value! = Null) {' yerine, "if (data. $ Value! == null) {'? – alltej

+0

AngularFire2 kullanıyorum. Bu kontrol nesnesi çalışmıyor gibi görünüyor. – alltej

+0

da bunu yapmalıyım '' const user = this.af.database.object ('users/$ {login}', {preserveSnapshot: true}); '' çalışmak ve kullanmak için 'data.val 'yapmak) ' – alltej

İlgili konular