Получение UID из Firebase от имени пользователя - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь создать список друзей из Firebase, но не могу понять, где я ошибаюсь.У меня есть эта функция для выборки пользователя на основе ввода имени пользователя:

handleAddMember = () => {
    var username = prompt("Enter the person's username and press submit");
    if (username != null) {    
        this.findUsersMatchingUsername(username);
    }
}

findUsersMatchingUsername( username ) {
    let userRef = fire.database().ref('users');
    userRef.orderByChild('username').equalTo(username).once('value', snap => {
        if(snap.val()){
            console.log(snap.val());
        }else{
            alert(username + ' exists?: false');
        }
    });
}

Она работает, как ожидалось, и возвращает это, когда есть имя пользователя в базе данных (snap.val ()): enter image description here

Вот структура данных: enter image description here

Как получится, когда я пытаюсь console.log (snap.val (). Id) это просто возвращает неопределенное?Идентификатор находится прямо на снимке.Кроме того, snap.key возвращает 'users', так что я предполагаю, что мне нужно перейти на один уровень дальше в базу данных, но как мне это сделать, если следующий уровень - это просто набор uid, и я не могу получить uid?

1 Ответ

0 голосов
/ 31 декабря 2018

Поскольку вы выполняете запрос, вы всегда получите набор результатов обратно, даже если это только один результат.Если вы собираетесь использовать только ОДНОГО пользователя, я рекомендую вам включить имя пользователя в качестве части ссылки:

findUsersMatchingUsername( username ) {
    fire.database().ref(`users/${username}`).once('value', snap => {
        if(snap.val()){
            console.log(snap.val());
        }else{
            alert(username + ' exists?: false');
        }
    });
}

С другой стороны, если вы собираетесь вернуть нескольких пользователей, затемчтобы получить доступ к свойствам каждого из них, вам нужно пойти на один уровень глубже, как вы и подозревали ... и для этого я бы зациклился на них, что-то вроде:

findUsersMatchingUsername( username ) {
    let userRef = fire.database().ref('users');
    userRef.orderByChild('username').equalTo(username).once('value', snap => {
        let results = snap.val() ? snap.val() : {};
        if (results == {})
        {
            alert(username + ' exists?: false');
            return;
        }
        Object.keys(results).forEach( eachKey => {
            console.log(results[eachKey]);   // Print the whole object in question
            console.log(results[eachKey]['id']);   // Print just the ID of the current object
            // EDIT: Since it's double-nested, you *might* have to do something like:
            // console.log(results[eachKey][eachKey]['id']);   // Print just the ID of the current object
        });
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...