数据未添加到数据库中的现有节点

时间:2017-04-22 13:40:12

标签: javascript firebase web firebase-realtime-database firebase-authentication

我一直在尝试将数据添加到我的数据库而没有任何运气。 在我的代码中,我在单击时创建了一个按钮,它会将数据添加到我的用户数据库,但它不会将其添加到用户,但它只是将数据添加到外部,如下所示:

why is the data not inside my user

是因为你在使用createUserWithEmailAndPassword()函数时无法添加数据吗?

任何人都可以告诉我它是如何完成的吗?

btn.addEventListener("click", function()
{

    firebase.auth().onAuthStateChanged(function(user)
    { 
        if (user)
        {
            var massage = inputText.value;
            var ref = database.ref("Users");

            var data = {
                display: massage
            }
            ref.push(data);
        }
    });
});

3 个答案:

答案 0 :(得分:1)

每当您致电push()时,Firebase都会生成一个新的唯一ID。因此,要将新数据添加到现有节点,您不应该调用push。相反,您需要找到该用户的现有节点的引用。

最简单(也是最常见)的方法是将用户数据存储在每个用户的UID下。

Users
  kHD...NoS
    username: "bob"

另请注意,没有理由将此类onAuthStateChange侦听器放在按钮单击处理程序中。只需从顶级JavaScript附加它,它就会在用户登录或其身份验证状态以任何其他方式发生变化时触发。

或者,如果代码确实必须响应按钮点击而运行,那么对于身份验证状态监听器没有实际用途,您只需检查firebase.auth().currentUser

btn.addEventListener("click", function()
{
    if (firebase.auth().currentUser)
    {
        var message = inputText.value;
        var ref = database.ref("Users");

        var data = {
            display: massage
        }
        ref.child(firebase.auth().currentUser.uid).update(data);
    }
}

答案 1 :(得分:0)

您的代码似乎正确如果您要在Firebase数据库中插入新条目(就像您的屏幕截图所示)。

但是,如果你真的想注册新用户,那么你应该使用firebase.auth().createUserWithEmailAndPassword()代替。

最后,如果您确实要更新现有节点,请参阅上面的 Frank 响应; - )

答案 2 :(得分:0)

试试这个。您可以将更新更改为设置。在你的情况下像

demo.update("users/KIK...fuA","display","my message");

//REVEALED METHOD TO ADD NODES WITH DATA TO REALTIME DATABASE
//eg, demo.update('mynode','myKey','myValue')
var demo = (function() {
  var pub = {};
  pub.update = function (node,key,value){
    var ref = firebase.database().ref('/');
    var obj = {};
    obj[key] = value;
    ref.child(node).update(obj)
    .then(function() {
      console.log('Update Ran Successfully');
    });       
  }
  //API
  return pub;
}());