Firebase数据库控制台.log()在Javascript中返回Null

Firebase数据库控制台.log()在Javascript中返回Null,javascript,firebase,firebase-realtime-database,console.log,Javascript,Firebase,Firebase Realtime Database,Console.log,如果可能的话,我希望向某人寻求帮助。在下面的代码中。我正在尝试console.log()。但是Console.log()返回的是null,而不是Firebase实时数据库中的值。我还提供了用于添加的代码,该代码运行良好。如果有帮助,请查看我的数据库图像。除了返回null之外,我的控制台中没有收到任何其他错误。 问题是您正在获取整个族节点并尝试访问每个成员的数据。 我试图重新创建您的数据库结构,并在运行代码时在控制台中得到了这个 { "Name One": {"

如果可能的话,我希望向某人寻求帮助。在下面的代码中。我正在尝试
console.log()。但是
Console.log()
返回的是null,而不是Firebase实时数据库中的值。我还提供了用于添加的代码,该代码运行良好。如果有帮助,请查看我的数据库图像。除了返回
null
之外,我的控制台中没有收到任何其他错误。


问题是您正在获取整个族节点并尝试访问每个成员的数据。 我试图重新创建您的数据库结构,并在运行代码时在控制台中得到了这个

{
  "Name One": {"MemberContact":10000,"MemberName":"Name Two"},
  "Name Two": {"MemberContact":10002,"MemberName":"Name Two"}
}
因此,如果您想从中获取每个用户的数据,请尝试以这种方式使用
forEach

Object.keys(snap.val()).forEach(key => {
  const memberData = snap.val()[key]
  //Data of each member
  var mName = memberData["MemberName"]
  var mDOB = memberData["MemberDOB"]
  var mEmail = memberData["MemberEmail"]
  var mContact = memberData["MemberContact"]
  console.log(mName + " " + mEmail + " " + mContact + " " + mDOB);
})

首次加载页面时,不应使用
firebase.auth().currentUser
,因为需要使用firebase auth


不能直接使用firebase.auth().currentUser。首先,您需要检查用户的身份验证状态。然后,只有您可以询问当前用户。因此,要做到这一点,您需要使用身份验证状态观察程序对其进行包装。您可以在firebase文档中阅读更多关于它的内容:[https://firebase.google.com/docs/auth/web/start][1]

函数addFamilyMember(){
var NameOfMember=document.getElementById(“newFamilyMemberName”).value;
var DoBOfMember=document.getElementById(“newFamilyMemberDoB”).value;
var EmailOfMember=document.getElementById(“NewFamilyMemberMail”).value;
var ContactOfMember=document.getElementById(“newFamilyMemberContactNo”).value;
firebase.auth().onAuthStateChanged((用户)=>{
如果(用户){
如果(
NameOfMember.length==“”||
DoBOfMember.length==“”||
EmailOfMember.length==“”||
ContactOfMember.length==“”
) {
警报(“请输入您家庭成员的所有详细信息”);
}否则{
var user=firebase.auth().currentUser;
变量uid;
如果(用户!=null){
uid=user.uid;
}
火基
.数据库()
.ref(“/Users/”+uid+“/Family/”+成员名称)
.设置({
MemberName:NameOfMember,
成员Dob:DoBOfMember,
成员电子邮件:EmailOfMember,
成员联系人:成员的联系人,
});
}
}
var user=firebase.auth().currentUser;
变量uid;
如果(用户!=null){
uid=user.uid;
}
火基
.数据库()
.ref(“/Users/”+uid+“/Family/”)
.on(“值”,函数(捕捉){
var mName=snap.child(“MemberName”).val();
var mDOB=snap.child(“MemberDOB”).val();
var mEmail=snap.child(“MemberEmail”).val();
var mContact=snap.child(“MemberContact”).val();
console.log(mName+“”+mEmail+“”+mContact+“”+mDOB);
})

})}
您可以从Firebase控制台共享屏幕截图吗?所有路径名都区分大小写。您还可以编辑问题并粘贴登录到
console.log(snap.val())
@Dharmaraj的值。该屏幕截图与Firebase控制台共享。我建议使用Firebase内置的
snap.forEach()而不是
Object.keys(snap.val()).forEach(key=>{
此操作。非常感谢您的帮助。我一定会仔细阅读代码并尽可能地使用它。
Object.keys(snap.val()).forEach(key => {
  const memberData = snap.val()[key]
  //Data of each member
  var mName = memberData["MemberName"]
  var mDOB = memberData["MemberDOB"]
  var mEmail = memberData["MemberEmail"]
  var mContact = memberData["MemberContact"]
  console.log(mName + " " + mEmail + " " + mContact + " " + mDOB);
})
let currentUserFamilyRef = null;

// for use with .on("value") and .off("value")
function onValueFamilyListener(snapshot) {
  const familyMembers = [];
  snapshot.forEach((familyMemberSnapshot) => {
    const MemberName = snap.child("MemberName").val();
    const MemberDOB = snap.child("MemberDOB").val();
    const MemberEmail = snap.child("MemberEmail").val();
    const MemberContact = snap.child("MemberContact").val();
    
    familyMembers.push({ MemberName, MemberDOB, MemberEmail, MemberContact });

    console.log(MemberName + " " + MemberDOB + " " + MemberEmail + " " + MemberContact);
  }

  // TODO: do something with the array of family members familyMembers
}

// for showing loading state
function showLoadingIcon(visible) {
  if (visible) {
    // TODO: show the icon
    // TODO: disable the submit button
  } else {
    // TODO: hide the icon
    // TODO: enable the submit button
  }
}

// for when addFamilyMember() is called while signed out
function addFamilyMemberSignedOut() {
  alert('You need to sign in first!');
  return false;
}

// for when addFamilyMember() is called while signed in
function addFamilyMemberSignedIn() {
  const NameOfMember = document.getElementById("newFamilyMemberName").value;
  const DoBOfMember = document.getElementById("newFamilyMemberDoB").value;
  const EmailOfMember = document.getElementById("newFamilyMemberEmail").value;
  const ContactOfMember = document.getElementById("newFamilyMemberContactNo").value;

  if (
    NameOfMember.length == "" ||
    DoBOfMember.length == "" ||
    EmailOfMember.length == "" ||
    ContactOfMember.length == ""
  ) {
    alert("Please enter all details of your Family Member");
    return false;
  }
  
  const user = firebase.auth().currentUser;
  
  if (user === null) {
    // shouldn't get here, but just in case.
    alert('You need to sign in first!');
    return false;
  }
  
  const uid = user.uid;
  
  showLoadingIcon(true);

  firebase
    .database()
    .ref("/Users/" + uid + "/Family/" + encodeURIComponent(NameOfMember)) // escape names as they may contain symbols, etc.
    .set({
      MemberName: NameOfMember,
      MemberDOB: DoBOfMember,
      MemberEmail: EmailOfMember,
      MemberContact: ContactOfMember,
    })
    .then(
      () => {
        // saved family member's data successfully
        showLoadingIcon(false);
        // reset form
        document.getElementById("newFamilyMemberName").value = "";
        document.getElementById("newFamilyMemberDoB").value = "";
        document.getElementById("newFamilyMemberEmail").value = "";
        document.getElementById("newFamilyMemberContactNo").value = "";
        alert('Information saved!');
      },
      (err) => {
        // failed to save family member's data
        showLoadingIcon(false);
        // err.code may lead to more specific error information
        console.error(err);
        alert('Failed to save information!');
      }
    );
}

// for calling the correct addFamilyMember version
let addFamilyMember = addFamilyMemberSignedOut;

showLoadingIcon(true); // while loading the user's info, show a loading icon

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // A user is (newly/already) signed in.
    // create a reference for this user's family
    const newUserFamilyRef = firebase.database()
      .ref("/Users/" + user.uid + "/Family");
    if (currentUserFamilyRef !== null) {
      // if the old user and new user are the same, do nothing
      // but if they've changed, remove the old listener and update currentUserFamilyRef
      if (!currentUserFamilyRef.isEqual(newUserFamilyRef)) {
        currentUserFamilyRef.off("value", onValueFamilyListener);
        currentUserFamilyRef = newUserFamilyRef;
      }
    } else {
      currentUserFamilyRef = newUserFamilyRef;
    }
    // use the "signed in" version of addFamilyMember
    addFamilyMember = addFamilyMemberSignedIn;
    // attach listener to "/users/{user.uid}/Family"
    currentUserFamilyRef.on("value", onValueFamilyListener);
  } else {
    // no user is signed in.
    // use the "not signed in" version of addFamilyMember
    addFamilyMember = addFamilyMemberSignedOut;
    // if a user was logged in, clean up it's listener to prevent errors
    if (currentUserFamilyRef !== null) {
      currentUserFamilyRef.off("value", onValueFamilyListener);
    }
    // no user, so set the reference to null
    currentUserFamilyRef = null;
  }
  showLoadingIcon(false);
});