Firebase Web中获取AllocEmp下Push ID对应值失败(返回null)求助
解决Firebase数据库获取AllocEmp值返回null的问题
看起来你的代码有两个关键问题导致返回null,咱们一步步来修复:
1. 数据库路径定位错误
从你给出的数据库结构来看,AllocEmp是某个具体投诉对象下的子节点,而不是直接挂在UserComplaints节点下。你当前写的路径UserComplaints/AllocEmp是不存在的,正确的逻辑应该先定位到目标投诉节点(比如UserComplaints下会有多个投诉,每个都有唯一ID),再访问其下的AllocEmp。
举个贴合你数据结构的例子,如果UserComplaints的实际结构是这样:
"UserComplaints": { "-targetComplaintId": { "AllocEmp" : { "-L3c47chqb35p0Ndo_XB" : "111122223333" }, "complaintDate" : "Wed Jan 10 18:40:34 GMT+05:30 2018", // ...其他投诉字段 } }
那你需要先指定投诉的唯一ID,再拼接路径:
// 替换成你实际要访问的投诉ID const targetComplaintId = "-targetComplaintId"; var fb = firebase.database().ref('UserComplaints').child(targetComplaintId).child('AllocEmp');
2. snap.val 要调用方法 snap.val()
val()是Firebase DataSnapshot对象的方法,不是属性。你之前的代码里snap.val只是引用了这个方法本身,没有执行调用,所以拿不到实际数据。另外,AllocEmp下是动态生成的Push ID,还需要进一步提取里面的数值:
fb.once('value', snap => { // 先判断节点是否存在,避免空值报错 if (snap.exists()) { const allocEmpData = snap.val(); // 因为Push ID是动态的,可以用Object.values直接提取所有值 const empValue = Object.values(allocEmpData)[0]; alert(empValue); // 这里会弹出111122223333 // 如果你知道具体的Push ID,也可以直接取值: // alert(allocEmpData["-L3c47chqb35p0Ndo_XB"]); } else { alert("未找到AllocEmp节点数据"); } });
完整修正后的示例代码
// 替换成你实际的目标投诉ID const targetComplaintId = "-yourRealComplaintId"; var fb = firebase.database().ref('UserComplaints').child(targetComplaintId).child('AllocEmp'); fb.once('value', snap => { if (snap.exists()) { const empValue = Object.values(snap.val())[0]; alert(empValue); } else { alert("该投诉下的AllocEmp节点不存在"); } });
另外建议你打开Firebase控制台的「实时数据库」标签,直观核对节点路径是否正确,这是排查这类路径问题最快捷的方式。
内容的提问来源于stack exchange,提问作者sree kumar
相关产品推荐
相关产品推荐

