I hope to seek help from someone if possible. In the following code. Im trying to console.log()
data from My Firebase reference as you can see in my code below. But the Console.log()
is returning null instead of the values that are there in Firebase Realtime Database. I have also provided the code for adding which is working well. Please have a look the image of my database if it helps. I am not getting any other error in my console except the fact that this is returning null
.
JavaScript
x
50
50
1
function addFamilyMember() {
2
var NameOfMember = document.getElementById("newFamilyMemberName").value;
3
var DoBOfMember = document.getElementById("newFamilyMemberDoB").value;
4
var EmailOfMember = document.getElementById("newFamilyMemberEmail").value;
5
var ContactOfMember = document.getElementById("newFamilyMemberContactNo").value;
6
7
if (
8
NameOfMember.length == "" ||
9
DoBOfMember.length == "" ||
10
EmailOfMember.length == "" ||
11
ContactOfMember.length == ""
12
) {
13
alert("Please enter all details of your Family Member");
14
} else {
15
var user = firebase.auth().currentUser;
16
var uid;
17
if (user != null) {
18
uid = user.uid;
19
}
20
21
firebase
22
.database()
23
.ref("/Users/" + uid + "/Family/" + NameOfMember)
24
.set({
25
MemberName: NameOfMember,
26
MemberDOB: DoBOfMember,
27
MemberEmail: EmailOfMember,
28
MemberContact: ContactOfMember,
29
});
30
}
31
}
32
33
var user = firebase.auth().currentUser;
34
var uid;
35
if (user != null) {
36
uid = user.uid;
37
}
38
39
firebase
40
.database()
41
.ref("/Users/" + uid + "/Family/")
42
.on("value", function (snap) {
43
var mName = snap.child("MemberName").val();
44
var mDOB = snap.child("MemberDOB").val();
45
var mEmail = snap.child("MemberEmail").val();
46
var mContact = snap.child("MemberContact").val();
47
48
console.log(mName + " " + mEmail + " " + mContact + " " + mDOB);
49
});
50
Advertisement
Answer
When loading the page for the first time, firebase.auth().currentUser
shouldn’t be used because Firebase Auth needs to check if the user’s login session is valid first.
JavaScript
1
134
134
1
let currentUserFamilyRef = null;
2
3
// for use with .on("value") and .off("value")
4
function onValueFamilyListener(snapshot) {
5
const familyMembers = [];
6
snapshot.forEach((familyMemberSnapshot) => {
7
const MemberName = snap.child("MemberName").val();
8
const MemberDOB = snap.child("MemberDOB").val();
9
const MemberEmail = snap.child("MemberEmail").val();
10
const MemberContact = snap.child("MemberContact").val();
11
12
familyMembers.push({ MemberName, MemberDOB, MemberEmail, MemberContact });
13
14
console.log(MemberName + " " + MemberDOB + " " + MemberEmail + " " + MemberContact);
15
}
16
17
// TODO: do something with the array of family members familyMembers
18
}
19
20
// for showing loading state
21
function showLoadingIcon(visible) {
22
if (visible) {
23
// TODO: show the icon
24
// TODO: disable the submit button
25
} else {
26
// TODO: hide the icon
27
// TODO: enable the submit button
28
}
29
}
30
31
// for when addFamilyMember() is called while signed out
32
function addFamilyMemberSignedOut() {
33
alert('You need to sign in first!');
34
return false;
35
}
36
37
// for when addFamilyMember() is called while signed in
38
function addFamilyMemberSignedIn() {
39
const NameOfMember = document.getElementById("newFamilyMemberName").value;
40
const DoBOfMember = document.getElementById("newFamilyMemberDoB").value;
41
const EmailOfMember = document.getElementById("newFamilyMemberEmail").value;
42
const ContactOfMember = document.getElementById("newFamilyMemberContactNo").value;
43
44
if (
45
NameOfMember.length == "" ||
46
DoBOfMember.length == "" ||
47
EmailOfMember.length == "" ||
48
ContactOfMember.length == ""
49
) {
50
alert("Please enter all details of your Family Member");
51
return false;
52
}
53
54
const user = firebase.auth().currentUser;
55
56
if (user === null) {
57
// shouldn't get here, but just in case.
58
alert('You need to sign in first!');
59
return false;
60
}
61
62
const uid = user.uid;
63
64
showLoadingIcon(true);
65
66
firebase
67
.database()
68
.ref("/Users/" + uid + "/Family/" + encodeURIComponent(NameOfMember)) // escape names as they may contain symbols, etc.
69
.set({
70
MemberName: NameOfMember,
71
MemberDOB: DoBOfMember,
72
MemberEmail: EmailOfMember,
73
MemberContact: ContactOfMember,
74
})
75
.then(
76
() => {
77
// saved family member's data successfully
78
showLoadingIcon(false);
79
// reset form
80
document.getElementById("newFamilyMemberName").value = "";
81
document.getElementById("newFamilyMemberDoB").value = "";
82
document.getElementById("newFamilyMemberEmail").value = "";
83
document.getElementById("newFamilyMemberContactNo").value = "";
84
alert('Information saved!');
85
},
86
(err) => {
87
// failed to save family member's data
88
showLoadingIcon(false);
89
// err.code may lead to more specific error information
90
console.error(err);
91
alert('Failed to save information!');
92
}
93
);
94
}
95
96
// for calling the correct addFamilyMember version
97
let addFamilyMember = addFamilyMemberSignedOut;
98
99
showLoadingIcon(true); // while loading the user's info, show a loading icon
100
101
firebase.auth().onAuthStateChanged(function(user) {
102
if (user) {
103
// A user is (newly/already) signed in.
104
// create a reference for this user's family
105
const newUserFamilyRef = firebase.database()
106
.ref("/Users/" + user.uid + "/Family");
107
if (currentUserFamilyRef !== null) {
108
// if the old user and new user are the same, do nothing
109
// but if they've changed, remove the old listener and update currentUserFamilyRef
110
if (!currentUserFamilyRef.isEqual(newUserFamilyRef)) {
111
currentUserFamilyRef.off("value", onValueFamilyListener);
112
currentUserFamilyRef = newUserFamilyRef;
113
}
114
} else {
115
currentUserFamilyRef = newUserFamilyRef;
116
}
117
// use the "signed in" version of addFamilyMember
118
addFamilyMember = addFamilyMemberSignedIn;
119
// attach listener to "/users/{user.uid}/Family"
120
currentUserFamilyRef.on("value", onValueFamilyListener);
121
} else {
122
// no user is signed in.
123
// use the "not signed in" version of addFamilyMember
124
addFamilyMember = addFamilyMemberSignedOut;
125
// if a user was logged in, clean up it's listener to prevent errors
126
if (currentUserFamilyRef !== null) {
127
currentUserFamilyRef.off("value", onValueFamilyListener);
128
}
129
// no user, so set the reference to null
130
currentUserFamilyRef = null;
131
}
132
showLoadingIcon(false);
133
});
134