我正在尝试从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())时返回此值:
当我尝试console.log(snap.val()。id)只是返回未定义状态时,为什么会这样? ID就在快照中。还要snap.key返回'users',所以我猜测我需要进一步进入数据库,但是如果下一层只是一堆uid,而我似乎无法获得uid,该怎么办呢? ?
答案 0 :(得分:1)
由于您正在执行查询,因此即使只有一个结果,也始终会返回一组结果。如果您仅打算吸引一位用户,那么我建议您将用户名作为参考的一部分:
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
});
});
}