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