You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Firebase实时数据库中将task保存到用户名称节点下?

问题描述

我尝试将'task'保存到Firebase实时数据库中,希望将其存入用户账号名称对应的引用节点下,但目前task被存储在用户节点外部。

当前数据库结构截图:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:43:15