所以我是Firebase数据库的新手,我喜欢它的是我不需要构建一个完整的后端来存储一些简单的数据。我想要做的是将数据推送到我想从firebase接收的数组。然后,我想检查填写的电子邮件是否包含在firebase数据库的数据中。但是因为它的火力基地,它有多个阵列,物体等,我不知道如何检查。因此流程为:用户填写数据,应用程序调用firebase数据库,应用程序正在从firebase检索当前数据。然后,应用程序将检查输入的数据是否已经存在,如果存在,将发出数据已存在于数据库中的警报。如果没有,将提交数据。
另外,我想知道这是否是从数据库中检索数据的正确方法:
Main.js
function writeUserData() {
var name = document.getElementById("name").value;
var email = document.getElementById("email").value;
firebase.database().ref('/aanmeldingen/').push({
username: name,
email: email,
});
var dbRef = firebase.database().ref().child('/aanmeldingen/');
dbRef.on('value', snapshot => {
const snap = snapshot.val();
const array = [];
array.push(snap);
console.log(array);
const res = array.includes(email);
console.log(res);
console.log(email);
});
}
在控制台中输出
如您所见,这会返回多个数据。 include函数将检查提交的电子邮件地址。即使我输入了#34; info@webpack.com",这也会返回false。如何查看正确的数据对象?它必须检查" 0"下的所有对象。如果提交的电子邮件已经存在,则在控制台中返回。
答案 0 :(得分:0)
我还没有测试过,但我希望你能得到这个想法。这也是不是最有效的方式。
function ifEmailExist(arr,email){
var _t = 0;
for(var x in arr){
for(var y in arr[x]){
if(arr[x][y].email){
if(arr[x][y] === email){
_t++;
}
}
}
}
return _t;
}
用法:
if(ifEmailExist(arr,"info@webpack.com") > 0){
//do stuff
}
答案 1 :(得分:0)
您应该使用child_added
代替value
。每当在数据库中添加新节点时,child_added将触发,然后您可以对数据执行操作。
var dbRef = firebase.database().ref().child('aanmeldingen');
dbRef.on('child_added', snapshot => {
var username = snapshot.val().username;
var email = snapshot.val().email;
console.log(username);
console.log(email);
});