如何在Firebase实时数据库中将task保存到用户名称节点下?
问题描述
我尝试将'task'保存到Firebase实时数据库中,希望将其存入用户账号名称对应的引用节点下,但目前task被存储在用户节点外部。
当前数据库结构截图:
保存task的函数:
function savetask() { var task = input.value; //* ENVIA O VALOR DO INPUT (task) ASSOCIADO AO NOME RECOLHIDO A CIMA PARA A DATABASE DA FIREBASE firebase.database().ref('nomes').push( task ); console.log('A seguinte tarefa foi enviada para a database:', task) } inputnota.addEventListener('submit', savetask)
保存名称到数据库的函数:
function savename(nome) { var nome = document.getElementById("nome").value; //* save in database firebase.database().ref('nomes').child(nome).push({ 'nome:':nome }); console.log('teu nome:',nome) alert('Welcome:',nome) //* prevent form from submitting return false }
问题原因
savetask函数直接向nomes根节点执行push操作,导致task被存在nomes的顶层,而非目标用户名称对应的子节点内。要实现需求,必须先定位到指定用户的节点,再在该节点下添加task数据。
解决方案
1. 保存用户名到本地存储
修改savename函数,在保存用户信息到数据库的同时,把用户名存到本地存储,方便后续保存task时获取:
function savename(nome) { var nome = document.getElementById("nome").value; // 将用户名存入本地存储 localStorage.setItem('currentUserName', nome); // 保存用户信息到数据库 firebase.database().ref('nomes').child(nome).push({ 'nome': nome }); console.log('teu nome:', nome) alert('Welcome: ' + nome) // 阻止表单默认提交行为 return false }
2. 修改task保存逻辑,关联到用户节点
修改savetask函数,从本地存储读取当前用户名,然后在该用户的节点下添加task:
function savetask(e) { // 阻止表单默认提交 e.preventDefault(); var task = input.value; // 读取本地存储的当前用户名 var currentUserName = localStorage.getItem('currentUserName'); if (!currentUserName) { alert('请先输入用户名!'); return; } // 向指定用户节点下存入task firebase.database().ref('nomes').child(currentUserName).push({ task: task }); console.log('A seguinte tarefa foi enviada para a database:', task); // 清空输入框 input.value = ''; } inputnota.addEventListener('submit', savetask)
补充说明
- 修改后,task会被存储在
nomes/[用户名]节点下,与用户信息同层级; - 用
localStorage是简单的实现方式,如果是带登录的系统,建议结合Firebase Auth的用户ID关联数据,安全性更高; - 把task存为对象格式(
{task: task}),而非直接存字符串,方便后续扩展更多字段。
内容的提问来源于stack exchange,提问作者Francisco costa
相关产品推荐
相关产品推荐

